C 入門經典 例8 2 建構函式的訪問順序

2021-09-24 00:00:21 字數 1109 閱讀 2816

1:父類和子類中都有建構函式和析構函式,那麼子類物件在建立時是父類先進行構造還是子類先進行構造?同樣,在子類物件釋放時,是父類先進行釋放,還是子類先進行釋放?這都是有先後順序的。答案是當從父類派生乙個子類並宣告乙個子類的物件時,它將先呼叫父類的建構函式,然後呼叫當前類的建構函式來建立物件;在釋放之類物件時,先呼叫的是當前類的析構函式,然後是父類的析構函式。

2:例項**如下:

// 8.2.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

class cemployee //定義cemployee類

~cemployee() //析構函式

};class coperator :public cemployee //從cemployee類派生乙個子類

~coperator() //析構函式

};int main(int argc, char* ar**) //主函式

view code

執行結果:

3:在分析完物件的構建、釋放過程後,會考慮這樣一種情況:定義乙個乙個基類型別的指標,呼叫子類的建構函式為其構建物件,當物件釋放時,需要呼叫父類的析構函式還是先呼叫子類的西溝函式,然後再呼叫父類的析構函式?答案是如果西溝函式時虛函式,就先呼叫子類析構函式,然後再呼叫父類的析構函式;如果西溝函式不是虛函式,就只呼叫父類的西溝函式。可以想像,如果在子類中為某個資料成員在堆中分配了空間,父類中的析構函式不是虛成員函式,將使子類的析構函式不被呼叫,導致記憶體洩漏。因此,在編寫類的析構函式時,析構函式通常是虛函式。構造函式呼叫順序不受基類在成員初始化表中是否存在以及被列出的順序的影響。

收藏

C 入門經典 例8 6 多重繼承的構造順序

1 單一繼承是先呼叫基類的建構函式,然後呼叫派生類的建構函式,但多重繼承將如何呼叫建構函式呢?多重繼承中的基類建構函式被呼叫的順序以派生表中宣告的順序為準。派生表就是多重繼承定義中繼承方式後面的內容,呼叫順序就是按照基類名識別符號的前後順序進行的。2 如下 8.6.cpp 定義控制台應用程式的入口點...

C 入門經典 9 3 建構函式和析構函式

在c 中定義類時,常常不需要定義相關的建構函式和析構函式,因為基類system.object提供了乙個預設的實現方式。但是,如果需要,可以提供自己的建構函式和析構函式,以便初始化物件和清理物件。使用下述語法把乙個簡單的建構函式新增到類中 class myclass public myclass 這個...

C 入門經典 例8 1 類的繼承

1 繼承是物件導向的主要特徵 此外還有封裝和多型 之一,它使得乙個類可以從現有類中派生,而不必重新定義乙個新類。繼承的實質就是用已有的資料型別建立新的資料型別,並保留已有資料型別的特點,以舊類為基礎建立新類,新類包含了舊類的資料成員和成員函式,並且可以在新類中新增新的資料成員和成員函式。舊類被稱為基...