2017.10.24update:
學習析構函式的時候又對比著理解了一下建構函式。
這兩者其實是乙個相反的過程,具體看一下此篇部落格。
2017.10.23:
c++中的建構函式
c++中的建構函式可以分為4類:
(1)預設建構函式。以student類為例,預設建構函式的原型為
student();//沒有引數
(2)初始化建構函式
student(int num,int age);//有引數
(3)複製(拷貝)建構函式
student(student&);//形參是本類物件的引用
(4)轉換建構函式
student(int r) ;//形參是其他型別變數,且只有乙個形參
一、 建構函式是幹什麼的
一般建構函式可以有各種引數形式,乙個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理)
class counter
private:
// 資料成員
int m_value;
該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作
eg: counter c1;
編譯系統為物件c1的每個資料成員(m_value)分配記憶體空間,並呼叫建構函式counter( )自動地初始化物件c1的m_value值設定為0
故:
建構函式的作用:初始化物件的資料成員。
二、複製拷貝建構函式
複製建構函式用於複製本類的物件
student s2(1002,1008);
student s3(s2);//將物件s2複製給s3。注意複製和賦值的概念不同。
下面這種情況叫做賦值,不呼叫複製建構函式。
student s4;
s4=s2;//原先就有等式左邊
大多數時候,在類中我們沒有宣告複製建構函式,而是c++自動為我們生成了乙個複製建構函式,如下:
student(student &b)
三、轉換建構函式
轉換建構函式用於將其他型別的變數,隱式轉換為本類物件。
下面的轉換建構函式,將int型別的r轉換為student型別的物件,物件的age為r,num為1004.
student(int r)
{ int num=1004;
int age= r;
}
轉換建構函式可以用在**?
假如過載了+號運算子,使得兩個student類的物件可以相加,其結果為兩個物件的成員變數age之和。
student s1(01,18);
student s2(02,20);
s1+s2; //其值就是s1.age + s2.age = 18+20=36。
那麼 s1+19 呢(類物件與int直接相加)?
因為我們定義了 轉換建構函式,那麼 s1+19,執行如果過程:
首選呼叫+號運算子,發現19不是student類的物件,而是int型別
然後呼叫轉換建構函式,將19變為student(19)
現在便可以進行加法運算,其值是s1.age+ (tempstudentobject).age=18+19 = 37
這是看了兩篇部落格綜合起來的,還有深拷貝淺拷貝的知識沒看,等繼續研究的時候在看:
原部落格在:
C 建構函式 拷貝建構函式
建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...
C 構造器(建構函式)
定義和作用 構造器是在構建類的 引用時 自動執行的方法。所以,每個類都必須至少要有乙個構造器。在訪問乙個類的時候,編譯器最先執行構造器中的 它與類同名,帶引數的構造器能夠獲取引數,但是與方法不同的是 構造器雖然也是一種 例項型別 即必須通過例項來進行呼叫,也可以稱之為引用型別 但是卻不能返回任何值 ...
C 建構函式
建構函式是一種特殊的成員函式,它主要用於為物件分配儲存空間,對資料成員進行初始化.1 建構函式的名字必須與類同名 2 建構函式沒有返回型別,它可以帶引數,也可以不帶引數 3 建構函式的主要作用是完成對類的初始化工作 4 在建立乙個類的新物件 使用new關鍵字 時,系統回自動呼叫給類的建構函式初始化新...