包含物件成員的類的構造與析構順序

2021-09-09 06:53:19 字數 1056 閱讀 8329

#includeusing namespace std;

class a

~a()

};class b

~b()

};class c

~c()

a ainc;};

class d:public c

~d()

a aind;

private:

b bind;};

int main(void)

那麼,這段程式執行後,輸出什麼呢?

b's constructor.

a's constructor.

c's constructor.

a's constructor.

b's constructor.

d's constructor.

d's destructor.

b's destructor.

a's destructor.

c's destructor.

a's destructor.

b's destructor.

分析如下:

(1)存在繼承關係時,先執行父類的建構函式,再執行子類的建構函式;

(2)當乙個類中含有物件成員時,在啟動本類的建構函式之前,先分配物件空間,按物件成員的宣告順序執行他們各自的建構函式,再繼續執行本類的建構函式;

(3)對於非靜態的區域性物件,他們的析構函式的執行順序與建構函式相反。

在本程式中:

(1)執行main(),需要建立乙個物件d,所以,需要執行d的建構函式。而d繼承自c,所以先要執行c的建構函式;

(2)而在c中存在物件成員binc和ainc,所以,在c的建構函式執行之前,先按宣告順序執行b和a的建構函式,然後執行c的建構函式;

(3)輪到構造d了,但是d中有物件成員aind和bind,所以,在d的建構函式執行之前,先按宣告順序執行a和b的建構函式,最後,執行d的建構函式;

(4)以上所有物件的析構函式以與建構函式的執行順序相反的順序執行。

最終的執行結果就不言而喻了。

物件的構造與析構

建立乙個物件時,常常需要作某些初始化的工作,例如對資料成員賦初值。注意,類的資料成員是不能在宣告類時初始化的。原因 類相當於乙個模板,是一種新資料型別,而非變數,當程式宣告乙個類,未申 請儲存空間,只有當這個類定義物件時才申請空間為了解決這個問題,c 編譯器提供了建構函式 constructor 來...

類的建構函式與析構

1.把物件的初始化工作放在建構函式中,把清除工作放在析構函式中。當物件被建立時,建構函式被自動執行。當物件消亡時,析構函式被自動執行。這下就不用擔心忘了物件的初始化和清除工作。2.建構函式 析構函式與類同名,由於析構函式的目的與建構函式的相反,就加字首 以示區別。3.建構函式與析構函式都沒有返回值型...

類的構造與析構函式

每個類都有建構函式和析構函式。即使使用者建立的類,系統也會為該類建立預設的建構函式。建構函式不能是虛函式。在物件導向語言裡,這兩個函式特別重要。物件導向的語言裡,其成員變數和函式都屬於物件 除了靜態全域性變數和靜態函式 我們知道類不能夠直接在定義時對其成員變數進行初始化,這部分工作一部分統一放到建構...