直接上**
#include using namespace std;
class parent
~parent() };
class child :public parent
~child()
private:
int b;
int c;
};void play()
int main(void)
編譯執行結果如下:
從執行結果可以看出,繼承中的構造和析構的呼叫規則是:
先呼叫父類建構函式,再呼叫子類建構函式,析構的順序和構造的順序相反。
1>子類物件建立時會首先呼叫父類的建構函式;
2>父類的建構函式執行完畢後,執行子類的建構函式;
3>當父類的建構函式有引數時,需要在子類的初始化列表中顯式呼叫;
4>析構函式的呼叫順序和構造函式呼叫順序相反;
下來再看一下類中組合類時的構造和析構的呼叫規則:
#include using namespace std;
class obj
~parent() };
class child :public parent
{public:
child(char *p) :parent(p), obj1(3, 4), obj2(5,6)
{ this->myp = p;
cout << "child建構函式+++" <
按照執行結果,分析得出建立子類物件時會先呼叫祖先類的建構函式,再呼叫父類的建構函式,如果類內部組合了類的話,按照類定義順序呼叫它的建構函式,最後在呼叫子類的建構函式,析構函式和建構函式的呼叫順序相反。
其中child(char *p) :parent(p), obj1(3, 4), obj2(5,6)中的obj1和obj2的建構函式的呼叫順序是按照obj1和obj2定義的順序,而不是按照初始化列表的先後來呼叫建構函式。
C 繼承中構造析構呼叫原則
構造析構呼叫原則 1 子類物件在建立時會首先呼叫父類的建構函式 2 父類建構函式執行結束後,執行子類的建構函式 3 當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫 4 析構函式呼叫的先後順序與建構函式相反 案例如下 define crt secure no warnings includ...
C 繼承中的構造和析構
在c 的繼承中,在子類物件構造時,需要呼叫父類建構函式對其繼承來的成員進行初始化,在子類進行析構時,需要呼叫父類的析構函式對其繼承來的成員進行清理,過程如下 1 子類物件在建立時會首先呼叫父類的建構函式 2 父類建構函式執行結束後,執行子類的建構函式 3 當父類的建構函式有引數時,需要在子類的初始化...
C 繼承中的構造和析構
先 呼叫父類建構函式 在呼叫 子類建構函式 析構的順序 和構造相反 1 子類物件在建立時會首先呼叫父類的建構函式 2 父類建構函式執行結束後,執行子類的建構函式 3 當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫 4 析構函式呼叫的先後順序與建構函式相反 class parent par...