本文參照於狄泰軟體學院,唐佐林老師的——《c++深度剖析教程》
問題:我們繼承了父類後,如何初始化父類成員?父類建構函式和子類建構函式有什麼關係?子類中可以定義建構函式
子類建構函式必須對繼承而來的成員進行初始化
直接通過初始化列表或者賦值的方式進行初始化
呼叫父類建構函式進行初始化
父類建構函式在子類中的呼叫方式
預設呼叫:適用於無參建構函式和使用預設引數的建構函式
顯示呼叫:通過初始化列表進行呼叫,適用於所有父類的建構函式。
示例**:子類的構造初探
#include
#include
using
namespace
std;
class parent
parent(string s)
};class child : public parent
child(string s) : parent(s)
};int main()
輸出結果:從輸出結果我們可以知道parent()
child()
parent(string s) : cc
child(string s) : cc
1. 子類物件在建立時會首先呼叫父類的建構函式
2. 先執行父類建構函式再執行子類的建構函式
3. 父類建構函式可以被隱式呼叫或者顯式呼叫。
問題:在工程專案中,不可能單純只有繼承或者組合關係,而是二者摻和在一起,那麼物件的建構函式又是如何的呢?示例**:子類構造深度解析
#include
#include
using
namespace
std;
class object
};class parent : public object
parent(string s) : object(s)
};class child : public parent
child(string s) : parent(s), mo1(s + " 1"), mo2(s + " 2")
};int main()
輸出結果:從輸出結果我們可以知道物件建立時建構函式的呼叫順序object(string s) : cc
parent(string s) : cc
object(string s) : cc 1
object(string s) : cc 2
child(string s) : cc
1. 呼叫父類的建構函式
如果父類還有父類那就先呼叫父類的父類的建構函式。
2. 呼叫成員變數的建構函式
3. 呼叫類自身的建構函式
口訣:先父母,後客人,再自己
問題:既然知道建構函式的呼叫順序,那麼析構函式的呼叫順序又是怎麼樣的呢?析構函式的呼叫順序與建構函式相反
1. 執行自身的析構函式
2. 執行成員變數的析構函式
3. 執行父類的析構函式
析構函式的呼叫順序與建構函式的呼叫順序剛好相反。
類繼承 繼承類的建構函式
派生類不能直接訪問基類的私有成員,必須通過基類提供的公有方法。派生類不能繼承基類的建構函式,因為建構函式和成員函式存在區別 建構函式用於建立新的物件,而其他成員函式是被現有的物件呼叫。派生類建構函式必須使用基類的建構函式。建立派生類物件時,先建立基類物件,因此基類物件應該在進入派生類建構函式之前被建...
繼承中的構造和析構
子類的建構函式必須對繼承而來的成員進行初始化 1.直接通過初始化列表或者賦值的方式進行初始 2.呼叫父類建構函式進行初始化 父類建構函式在子類中的呼叫方式 1.預設呼叫.適用無參建構函式和使用預設引數的建構函式 2.顯示呼叫.通過初始化列表進行呼叫,適用於所有父類的建構函式 例子 class chi...
繼承中構造析構
在繼承中面臨乙個問題就是 我們的基類和派生類都有各自的建構函式和析構函式,那麼再例項化派生類成員的時候,這個構造析構的順序是怎麼樣的呢?class animal animal void setm int a 0 intgetage private int age 我們構造了個動物類,我們需要繼續構造...