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許可權的成員,無論是在類...