1、子類物件在建立時會首先呼叫父類的建構函式
2、父類建構函式執行結束後,執行子類的建構函式
3、當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫
4、析構函式呼叫的先後順序與建構函式相反
總之,在繼承與組合混搭的情況下,
構造函式呼叫順序:先呼叫父類建構函式(一直呼叫到最祖先的父類,類似遞迴的思想),再呼叫組合物件的建構函式,最後呼叫本身的建構函式。
析構函式呼叫順序:先呼叫本身的析構函式,再次呼叫組合物件的析構函式,最後呼叫父類的建構函式 (構造與析構的呼叫順序剛好相反)。
**如下:
#include using namespace std;
class object
~object()
protected:
int a;
int b;
};class parent : public object
~parent()
void printp(int a, int b)
protected:
char* p;
};class child : public parent
~child()
void printc()
protected:
char* myp;
object obj1;
object obj2;
};void objplay()
void main()
C 繼承和組合混搭下的構造和析構呼叫原則
原則 先構造父類 如果父類還有父類,則先構造父類的父類 再構造成員變數 構造組合類 最後構造自己 先析構自己,再析構成員變數 析構組合類 最後析構父類,如果父類還有父類,繼續析構 父類的父類。示例 祖宗類object,同時也是子類的組合類,父類parent,子類child include using...
繼承情況下的類作用域
建構函式和析構函式中的虛函式,構造和析構也是分階段的,也就是說從無到基類物件,再到派生類物件,從派生類物件到基類物件,再到無。這中間有乙個狀態就是基類物件,此時直接或間接呼叫虛函式,只能是基類中的版本,因為後邊的還沒形成呢。因為如果使用派生類中的版本,可能需要訪問派生類物件的成員,而這些還不存在,為...
繼承情況下類的作用域
在繼承情況下,派生類的作用域巢狀在基類作用域中。因此,如果不能在派生類作用域中確定的名字,就在外圍基類作用域中查詢該名字的定義。在基類和派生類中使用同一名字的成員函式,其行為與資料成員一樣 在派生類作用域中派生類成員將遮蔽基類成員。即使函式原型不同,基類成員也會被遮蔽。如果要訪問被遮蔽的基類成員,需...