C++之函數模板的概念和意義(一)
一、函數模板的引出:1、c++中有幾種交換變量的方法:(1)定義宏代碼塊(2)定義函數代碼版本一:#include <iostream>#include <string>using namespace std;#define SWAP(t,a,b) do { t c =a; a =b; b = c; &nb......閱讀全文
C++之函數模板的概念和意義(一)
一、函數模板的引出:1、c++中有幾種交換變量的方法:(1)定義宏代碼塊(2)定義函數代碼版本一:#include <iostream>#include <string>using namespace std;#define SWAP(t,a,b) ? do ? ? ? ? ? ? ? ? ? ?{
C++之函數模板的概念和意義(二)
輸出結果:root@txp-virtual-machine:/home/txp# ./a.outa= 5b= 2m= 4n= 6d= Txpt= xiaoping注解:同樣實現了交換功能。2、兩種方法的優缺點:定義宏代碼塊-優點:代碼復用,適合所有的類型-缺點:編譯器不知道宏的存在,缺少類型檢查定義
C++之函數模板的概念和意義(三)
以下是選擇排序算法測試代碼 ? int array[5]={3,5,6,4,9}; ? Println(array,5); ? Sort(array,5); ? Println(array,5); ? string s[5]={"c","c++","rust","golang","python"}
C++之拷貝構造函數的淺copy和深copy(一)
一、深拷貝和淺拷貝構造函數總結:1、兩個特殊的構造函數:(1)無參構造函數:沒有參數的構造函數Class Test{ public: ? ? Test() ? ? { ? ? ? //這是一個無參構造函數 ? ? }};當類中沒有定義構造函數時,編譯器默認提供一個無參構造函數,并且其函數體為空;換句
C++之拷貝構造函數的淺copy和深copy(二)
(3)注意:在寫程序的時候,定義的類對象初始化時看屬于哪種類型的:Test t;//對應無參構造函數Test t(1);//對應有參構造函數Test t1;Test t2=t1;//對應拷貝構造函數比如下面我定義的類對象屬于無參構造函數(當然前提是你手寫了其他構造函數,雖然說編譯器會默認提供,但是既
C++之拷貝構造函數的淺copy和深copy(三)
輸出結果:root@txp-virtual-machine:/home/txp# g++ test.cpproot@txp-virtual-machine:/home/txp# ./a.outt1.i = 2, t1.j = 3, t1.p = 0x1528010t2.i = 2, t2.j = 3
C++之拷貝構造函數的淺copy和深copy(四)
輸出結果:root@txp-virtual-machine:/home/txp# g++ test.cpproot@txp-virtual-machine:/home/txp# ./a.outt1.i = 2, t1.j = 3, t1.p = 0xb0a010t2.i = 2, t2.j = 3,
C++之類型轉換函數(一)
一、轉換構造函數的學習:1、回憶數據類型轉換:在平時寫代碼的時候,最怕的就是那種隱式數據類型轉換了,一不小心,軟件就bug不斷;而顯示數據類型(一般是程序自己去強制類型轉換,這個是我們能夠明顯的識別和掌控的)。為此我們這里總結了一副隱式類型轉換的圖:下面我們來幾個隱式轉換的例子:代碼版本一:#inc
C++之靜態成員變量和靜態成員函數學習總結(一)
上圖的板子有最近買的,也有以前買的(stm32、esp8266、51、eps32、小熊派、合宙的cat1、樹莓派3b+);說實話,這些板子買來,一直放在那里吃灰,后期自己的方向也不玩硬件開發板啥的;所以上面的板子都送給了公眾號讀者在校生,讓這些板子發揮它們最大的價值,板子也會在最近慢慢一一送出去;贈
C++之類型轉換函數(三)
輸出結果(沒有編譯通過)root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:21:14: error: cannot convert ‘Test’ to ‘int’ i
C++之類型轉換函數(四)
3、轉換構造函數出廠:我們前面學習過構造函數,構造函數它可以定義不同類型的參數;但是我們今天這里所說的轉換構造函數的定義時這樣的:有且僅有一個參數參數是基本類型參數是其它類型接著我們對上面的普通數據類型轉換類類型的代碼進行分析:#include <iostream>#include <string>
C++之類型轉換函數(六)
2、類類型之間的轉換:這個問題也是之前我們上面簡單的測試,不能進行類類型之間的轉換;現在我們學習了類型轉換函數,是可以進行轉換的:代碼版本一:#include <iostream>#include <string>using namespace std;class Test;class Value{
C++之類型轉換函數(七)
輸出結果:root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:42:15: error: conversion from ‘Test’ to ‘Value’ is am
C++之類型轉換函數(二)
輸出結果:root@txp-virtual-machine:/home/txp# ./a.outd =-200ui= 100(ui+i) = 4294967196Postive注解:通過打印(ui+i)的值我們發現,i原本是int數據類型,這里隱式轉換成無符號的數據類型了為了讓大家更加理解隱式的轉換
C++之類型轉換函數(五)
輸出結果:root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:21:8: error: no match for ‘operator=’ (operand types
C++之靜態成員變量和靜態成員函數學習總結(二)
說明,這里靜態成員變量不能使用初始化列表去初始化,這里要明白上面說的那句話:靜態成員變量需要在類外單獨分配空間,換句話說,就是只有在類的外部重新定義靜態成員變量才可以存儲到靜態存儲區。報錯如下:root@txp-virtual-machine:/home/txp#?g++?test4.cpptest
C++之靜態成員變量和靜態成員函數學習總結(三)
3、靜態成員函數 vs ?普通成員函:靜態成員函數普通成員函數所有對象共享YesYes隱含this指針NoYes訪問普通成員變量(函數)NoYes訪問靜態成員變量(函數)YesYes通過類名直接調用YesNo通過對象名直接調用YesYes4、版本代碼四:#include?<stdio.h>class
C++之類模板的深入學習總結
一、類模板的深入學習:1、類模板可以定義任意多個不同的類型參數(這一點和模板函數一樣)template < typename T1, typenaem T2 >class Test{public: ? ?void add(T1 a, T2 b);}//定義類對象時Test2、類模板可以被特化指定類模
C++之繼承中的構造和析構學習總結(一)
在我們前面學習過類中的構造函數,以及析構函數,那么自然而然,在繼承關系中,必然是存在著析構和構造著。一、子類對象的構造1、問題的引出如何初始化父類成員?父類構造函數和子類構造函數有什么關系?2、子類中的構造函數怎樣初始化父類成員:子類中也是可以定義構造函數的:--必須對繼承而來的成員進行初始化,那么
狀態函數的概念和應用
狀態函數(state function),即指表征體系特性的宏觀性質,多數指具有能量量綱的熱力學函數(如內能、焓、吉布斯自由能、亥姆霍茨自由能)。主要應用于工程領域。狀態函數只對平衡狀態的體系有確定值,其變化值只取決于系統的始態和終態。另外,狀態函數之間相互關聯、相互制約。狀態函數按其性質可分為兩類
C++之操作重載符學習總結(一)
一、完善的復數類:在上一篇文章里面我們已經提到了操作符重載的概念和使用,同時也舉例了一個數學里面的復數操作,從一開始使用友元到使用操作符重載全局函數,再到使用操作符重載類成員函數,這樣一步步演變而成我們最終實現了復數的實部加實部,虛部加虛部;而且當時我們只講解了一個操作重載符“+”,所以為了完善學習
C++之操作符重載學習總結(一)
一、操作符重載:1、我們先來看一個問題實現,下面的復數解決方案是否可行,復數大家應該都不陌生(分為實部和虛部):代碼版本一:運行結果:這里通過Add函數可以解決Complex對象相加的問題,但是在我們數學運算里面就是直接實部加實部,虛部加虛部,和正常的實數相加一樣,所以說,為什么不直接這樣操作呢,這
C++之字符串類學習總結(一)
一、回顧c語言對字符串的實現:一般我們在c語言要實現對字符串操作的話,一般是采用字符數組或者一組函數來實現的,為啥這樣做呢,那是因為c語言里面根本就沒有字符串類型的關鍵字;而且c語言也支持自定義類型,所以更加無法獲得字符串類型。為了解決這個問題,在c++中,引入了自定義類型,而且可以通過類來完成對字
模板鏈的復制的特點和意義
1.特點:邊解旋邊復制,半保留復制。2.結果:一個DNA分子復制一次形成兩個完全相同的DNA分子。3.意義:使親代的遺傳信息傳給子代,從而使前后代保持了一定的連續性……4.準確復制的原因:DNA之所以能夠自我復制,一是因為它具有獨特的雙螺旋結構,能為復制提供模板;二是因為它的堿基互補配對能力,能夠使
C++之繼承中的構造和析構學習總結(二)
代碼實踐:輸出結果:注解:我們可以看到,先定義了一個Child對象,然后最先訪問Object帶參構造函數,然后再是Parent帶參構造函數(說白了就是父類先觸發),然后在子類Child中又包含了組合關系(也就是客人),然后Object類中的帶參構造函數,最后再觸發自身的帶參構造函數。二、子類對象的析
再論C++中的const和引用(一)
今天給大家分享一下這段時間學習c++的總結學習:c++里面的const關鍵字和引用。一、const關鍵字的總結1、const什么時候為只讀變量,什么時候又是常量呢?(1)const常量的判別規則:只用字面量初始化的const常量才會進入符號表使用其它變量初始化的const常量仍然是只讀變量被vola
C++之操作重載符學習總結(二)
運行結果:上面設計到一些數學知識,比如復數的乘法和除法運算:乘法:(a+bi)(c+di)=(ac-bd)+(bc+ad)i除法:(a+bi)/(c+di)=(ac+bd)/cc+dd +(bc-ad)/cc +dd3、注意事項:C++規定賦值操作符"="只能重載為成員函數操作符重載不能改變原操作符
血型的概念和意義
血型(blood groups;blood types)是以血液抗原形式表現出來的一種遺傳性狀。狹義地講,血型專指紅細胞抗原在個體間的差異;但現已知道除紅細胞外,在白細胞、血小板乃至某些血漿蛋白,個體之間也存在著抗原差異。?因此,廣義的血型應包括血液各成分的抗原在個體間出現的差異。通常人們對血型的了
傳遞函數的零點和極點的物理意義
《傳遞函數的極點就是微分方程的特征根,因此它們決定了所描述系統自由運動的模態,而且在強迫運動中(即零初始條件響應),也會包含這些自由運動的模態...傳遞函數的極點可以受輸入函數的激發,在輸出響應中形成自由運動的模態.傳遞函數的零點并不形成自由運動的模態,但它們卻影響各模態在響應中所占的比重,因而也影
C++之操作符重載學習總結(二)
4、再次改進代碼:可以將操作符重載函數定義成為類的成員函數(前面我們學過,友元現代軟件開發不允許):比全局操作符重載函數少一個參數(左操作數,成員函數中隱藏的 this 參數可以充當左操作數的角色)不需要依賴友元就可以完成操作符重載編譯器優先在成員函數中尋找操作符重載(一旦在成員函數中找到,就不會去