繼承與組合混搭情況下,構造和析構呼叫原則

2021-10-03 07:08:49 字數 775 閱讀 3513

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...

繼承情況下的類作用域

建構函式和析構函式中的虛函式,構造和析構也是分階段的,也就是說從無到基類物件,再到派生類物件,從派生類物件到基類物件,再到無。這中間有乙個狀態就是基類物件,此時直接或間接呼叫虛函式,只能是基類中的版本,因為後邊的還沒形成呢。因為如果使用派生類中的版本,可能需要訪問派生類物件的成員,而這些還不存在,為...

繼承情況下類的作用域

在繼承情況下,派生類的作用域巢狀在基類作用域中。因此,如果不能在派生類作用域中確定的名字,就在外圍基類作用域中查詢該名字的定義。在基類和派生類中使用同一名字的成員函式,其行為與資料成員一樣 在派生類作用域中派生類成員將遮蔽基類成員。即使函式原型不同,基類成員也會被遮蔽。如果要訪問被遮蔽的基類成員,需...