c 什麼叫建構函式,它的作用是什麼

時間 2021-09-15 00:09:58

1樓:匿名使用者

建構函式的名字和類的名字一樣,並且沒有返回值型別。通常用於初始化私有的資料成員。

2樓:小杰知音

c++類的建構函式詳解

一、 建構函式是幹什麼的

class counter

private:

// 資料成員

int m_value;

}該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作

eg: counter c1;

編譯系統為物件c1的每個資料成員(m_value)分配記憶體空間,並呼叫建構函式counter( )自動地初始化物件c1的m_value值設定為0

故:建構函式的作用:初始化物件的資料成員。

二、 建構函式的種類

class complex

// 一般建構函式(也稱過載建構函式)

// 一般建構函式可以有各種引數形式,一個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理)

// 例如:你還可以寫一個 complex( int num)的建構函式出來

// 建立物件時根據傳入的引數不同呼叫不同的建構函式

complex(double real, double imag)

// 複製建構函式(也稱為拷貝建構函式)

// 複製建構函式引數為類物件本身的引用,用於根據一個已存在的物件複製出一個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製一份到新建立的物件中

// 若沒有顯示的寫複製建構函式,則系統會預設建立一個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述

complex(const complex & c)

// 型別轉換建構函式,根據一個指定的型別的物件建立一個本類的物件

// 例如:下面將根據一個double型別的物件建立了一個complex物件

complex::complex(double r)

// 等號運算子過載

// 注意,這個類似複製建構函式,將=右邊的本類物件的值複製給等號左邊的物件,它不屬於建構函式,等號左右兩邊的物件必須已經被建立

// 若沒有顯示的寫=運算子過載,則系統也會建立一個預設的=運算子過載,只做一些基本的拷貝工作

// 複製等號右邊的成員到左邊的物件中

this->m_real = rhs.m_real;

this->m_imag = rhs.m_imag;

// 把等號左邊的物件再次傳出

// 目的是為了支援連等 eg: a=b=c 系統首先執行 b=c

// 然後執行 a= ( b=c的返回值,這裡應該是複製c值後的b物件)

return *this;}};

下面使用上面定義的類物件來說明各個建構函式的用法:

void main()

三、思考與測驗

1. 仔細觀察複製建構函式

complex(const complex & c)

為什麼函式中可以直接訪問物件c的私有成員?

2. 挑戰題,瞭解引用與傳值的區別

complex test1(const complex& c)

complex test2(const complex c)

complex test3()

complex& test4()

void main()

四、附錄(淺拷貝與深拷貝

上面提到,如果沒有自定義複製建構函式,則系統會建立預設的複製建構函式,但系統建立的預設複製建構函式只會執行「淺拷貝」,即將被拷貝物件的資料成員的 值一一賦值給新建立的物件,若該類的資料成員中有指標成員,則會使得新的物件的指標所指向的地址與被拷貝物件的指標所指向的地址相同,delete該指標 時則會導致兩次重複delete而出錯。下面是示例:

【淺拷貝與深拷貝】

#include

#include

class person

}// 系統建立的預設複製建構函式,只做位模式拷貝

person(person & p)

~person( )

private :

char * m_pname;

};void main( )

// 下面自己設計複製建構函式,實現「深拷貝」,即不讓指標指向同一地址,而是重新申請一塊記憶體給新的物件的指標資料成員

person(person & chs);

// 則新建立的物件的m_pname與原物件chs的m_pname不再指向同一地址了}

3樓:匿名使用者

構造就是建立物件的例項

建構函式,就負責類的例項的物件...

c 中的虛擬函式有什麼作用,C 中虛擬函式的作用是什麼?它應該怎麼用呢?

類的三個重要特徵 封裝 繼承 多型性。其中多型性就是通過函式過載 運算子過載實質上也是函式過載 和虛擬函式來實現的。虛擬函式的作用 在基類用virtual宣告成員函式為虛擬函式,在派生類中重新定義該函式,就可以通過基類指標或引用來訪問基類和派生類中的同名函式。虛擬函式實現多型性 同一類族中不同類的物...

什麼是生物鐘,它的作用是什麼,什麼叫「生物鐘」,它的作用是什麼?

生物鐘又稱生理鍾。它是生物體內的一種無形的 時鐘 實際上是生物體生命活動的內在節律性,它是由生物體內的時間結構序所決定。通過研究生物鐘,目前已產生了時辰生物學 時辰藥理學和時辰 學等新學科。可見,研究生物鐘,在醫學上有著重要的意義,並對生物學的基礎理論研究起著促進作用。人體隨時間節律有時 日 周 月...

這種食物叫什麼,它的作用是什麼,這種食物叫什麼名字?

慈姑,屬澤瀉科植物慈姑的球莖,是多年生水生草本植物,葉子像箭頭,開白花。地下有球莖,黃白色或青白色。李時珍說 慈姑一根歲產十二子,如慈姑之乳諸手,故以名之。燕尾,其時之象燕尾分叉,故有此名也。慈姑含有秋水仙鹼等多種生物鹼,有防癌抗癌腫 解毒消癰作用,常用來防治腫瘤。中醫認為,慈姑主解百毒,能解毒消腫...