7 類的建構函式與析構函式

2021-06-26 02:06:53 字數 1980 閱讀 7575

方案: 如果自己為類建立乙個初始化函式,當物件建立後,自己在呼叫初始化

函式對類進行初始化,這樣顯示呼叫非常麻煩,於是c++編譯器提供了建構函式

c++的建構函式

建構函式與類名相同,可以有引數,但是沒有返回值型別。

一般情況,c++編譯器會自動呼叫建構函式。也可以手動呼叫建構函式,(手動必須有個物件的)

如果test為乙個類:

test t1(4); // 自動呼叫建構函式

test t2=5;  // 自動呼叫建構函式

test t3 = test(6); //主動呼叫建構函式,test(int)就是建構函式

成員函式的過載

類的成員函式和普通函式一樣可以進行過載,並尊重相同的規則。

兩個特殊的成員函式

1. 當類中沒有定義任何乙個建構函式,c++編譯器為我們提供無慘建構函式和拷貝建構函式。

(說明:c++編譯器提供的這個無慘拷貝函式是乙個空函式,拷貝也是淺拷貝)

2. 當類中定義了任意的建構函式,c++編譯器不會拷貝建構函式。

test();  //沒有引數的拷貝建構函式

test(const test& v);/// 拷貝建構函式

乙個沒有析構函式和複製建構函式的類:

說明: c++編譯為我們提供的是乙個空的無參建構函式,和乙個複製建構函式。所以函式最好定義建構函式。

c++中提供了初始化列表對成員變數進行初始化。

(1)成員變數的初始化順序與宣告順序相關。

(2)初始化列表先與建構函式的函式體執行

補充:

(1)類中的const成員是肯定被分配空間的

類中的const成員變數只是乙個唯讀變數,因為編譯器無法直接得到const成員變數的初始值因此無法進入符號表成為真正意義上的常量。

(2)初始化與賦值不同

初始化:被初始化的物件正在被建立。

賦值 :已經存在的物件。

正如建構函式,析構函式是c++編譯器自動呼叫,我們只需要簡單的宣告即可。

析構函式沒有引數,也沒有任何返回值型別宣告

析構函式在物件銷毀時,自動呼叫

建構函式與析構函式的順序

析構函式的呼叫順序與對應的的建構函式的呼叫順序相反。

類的建構函式與析構函式

建構函式 對於類物件成員的初始化我們始終是建立成員函式然後手工呼叫該函式對成員進行賦值的,那麼在c 中對於類來說有沒有更方便的方式能夠在物件建立的時候就自動初始化成員變數呢,這一點對操作保護成員是至關重要的,答案是肯定的。關於c 類成員的初始化,有專門的建構函式來進行自動操作而無需要手工呼叫。類建構...

類的建構函式與析構函式

類的建構函式與析構函式 include 所有的類預設都有乙個建構函式,析構函式 建構函式,過載,沒有返回值,class myclass myclass int data 建構函式可以過載 myclass void run void main1 explicit 關鍵字 控制函式不能採用型別轉換 in...

類建構函式 析構函式

下面的例項有助於更好地理解建構函式的概念 include using namespace std class line 成員函式定義,包括建構函式 line line void void line setlength double len double line getlength void 程式的...