一、如何初始化父類成員?父類建構函式和子類建構函式有什麼關係?
子類中可以定義建構函式
子類建構函式
(1)必須對繼承而來的成員進行初始化
(2)直接通過初始化列表或者賦值的方式進行初始化
(3)呼叫父類建構函式進行初始化
父類建構函式在子類中的呼叫方式
(1)預設呼叫
適用於無參建構函式和使用預設引數的建構函式
(2)顯示呼叫
通過初始化列表進行呼叫
適用於所有父類建構函式
如果:class child : public parent
child(string s) //沒有顯示呼叫父類的建構函式則呼叫預設
};int main()
則結果為:
parent()
child()
parent()
child(string s) : cc
構造規則:
子類物件在建立時會首先呼叫父類的建構函式
先執行父類建構函式再執行子類的建構函式
父類建構函式可以被隱式呼叫或者顯示呼叫
子類物件的構造
物件建立時建構函式的呼叫順序
呼叫父類的建構函式
呼叫成員變數的建構函式
呼叫類自身的建構函式
口訣:先父母,後客人,在自己
例項分析:子類構造深度解析
#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
子類物件的析構
析構函式的呼叫順序與建構函式相反
執行自身的析構函式
執行成員變數的析構函式
執行父類的析構函式』
例項分析:物件的析構
#include #include using namespace std;
class object
~object()
};class parent : public object
parent(string s) : object(s)
~parent()
};class child : public parent
child(string s) : parent(s), mo1(s + " 1"), mo2(s + " 2")
~child()
};int main()
object(string s) : cc
parent(string s) : cc
object(string s) : cc 1
object(string s) : cc 2
child(string s) : cc
~child() cc
~object() : cc 2
~object() : cc 1
~parent() : cc
~object() : cc
總結:
子類物件在建立時需要呼叫父類建構函式進行初始化
先執行父類建構函式然後執行成員的建構函式
父類建構函式顯示呼叫需要在初始化列表中進行
子類物件在銷毀時需要呼叫父類析構函式進行清理
析構順序與構造順序對稱相反
第四十六節 C 函式物件 用於STL的演算法中
函式物件 常用於標準模板庫stl的演算法 1.定義上為函式的物件 2.實現上是實現了operator 的類的物件 常用的函式物件可分為多種 1 一元函式 輸入為1個引數 2 二元函式 輸入為2個引數 3 帶變數的一元函式 輸入為1個引數,且類內有屬性成員 4 帶變數的二元函式 輸入為2個引數,且類內...
繼承中的構造與析構
賦值相容性原則 子類物件可以當作父類物件使用 子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 子類是就是特殊的父類!class child public parent int main int argc,char argv ...
46 繼承中的構造與析構
問題 如何初始化父類成員?父類建構函式和子類建構函式有什麼關係?必須對繼承而來的成員進行初始化 父類建構函式在子類中呼叫方式 父類建構函式的呼叫 class child public parent child string s parent parameter to parent 範例 子類的建構函...