c 中不同場景建構函式的次序問題

2021-08-04 23:50:35 字數 1014 閱讀 9280

1.普通類的建構函式:

(1)首在定義類時傳引數指標this到建構函式

(2)按類中資料成員宣告的次序一一進行分配記憶體空間並初始化

(3)執行建構函式的函式體

普通類的析構函式:

(1)首先執行函式體

(2)對成員變數釋放空間

2.繼承與派生的建構函式

(1)首在定義類時傳引數指標this到建構函式

(2)依照基類在建構函式中的定義次序呼叫基類的建構函式,初始化他們的成員(從左到右)

(3)按類中資料成員宣告的次序一一進行分配記憶體空間並初始化

(4)執行建構函式的函式體

繼承與派生的建構函式:derived::derived(const derived&v):base(v){}

(1)執行次序與建構函式相同

繼承與派生的析構函式:次序與虛構函式相反

例子:

#includeusing namespace std;

class a

void display()

virtual void show()

void print()

virtual ~base()

};class derived :public base

virtual void show()

void print()

virtual ~derived()

};void main()

輸出:base::show

base::show

base::show

derived::show

derived::show

derived::show

base::show

base::show

結論在類被構造的時候,先執行虛擬繼承的父類的建構函式,然後從左到右執行普通繼承的父類的建構函式,

然後按照定義的順序執行資料成員的初始化,最後是自身的建構函式的呼叫。析構函式與之完全相反,互成映象。

C 繼承中的建構函式問題

c 的繼承是不會整合建構函式的,但是子類在實現建構函式時會預設呼叫父類中的無參建構函式 想要不呼叫就要在子類中進行一些特殊操作 class program class person public person 子類需要呼叫父類的無參建構函式 public string name public int...

c 中構造函式呼叫另一建構函式的問題

題目如下 問下列 的列印結果為0嗎?include include using namespace std struct cls cls int main 我當時是這樣想的,建構函式就是為物件分配記憶體的過程,其主要目的就是為了對私有變數進行初始化,所以我就想乙個物件不能呼叫 兩次建構函式,即使這兩...

C 建構函式定義不同的許可權

c 類和c 結構體的主要的區別就在於 c 類有訪問許可權的控制而c 結構體預設的所有的訪問許可權是public的。大家都知道c 類都有建構函式,即使在編寫 的時候沒有顯示的寫上c 建構函式,c 也會給每個類提供乙個預設的建構函式,許可權是public。c 類中定義public許可權的成員,無論是在類...