c 建構函式

2021-08-09 17:39:02 字數 1814 閱讀 6363

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關鍵字 時,系統回自動呼叫給類的建構函式初始化新...