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