q:如何初始化父類成員?父類建構函式與子類建構函式由什麼關係?
a.子類物件的構造
1.子類在可以定義建構函式
2.子類建構函式--必須對繼承而來的成員程序初始化(直接通過初始化列表或者賦值的方式進行初始化,呼叫父類建構函式進行初始化)
b.父類建構函式在子類中的呼叫方式
1.預設呼叫--適用於無參建構函式和使用預設引數的建構函式
2.顯示呼叫--通過初始化列表進行呼叫,適用於所有父類建構函式
**示例
#include #include using namespace std;
class parent
parent(string s)
};class child : public parent
child(string s) : parent(s)//對父類建構函式進行顯示呼叫
};int main()
執行結果如圖所示
由該示例和執行結果可以對構造規則進行乙個總結:子類物件在建立時首先會呼叫父類的建構函式,先執行父類建構函式在執行子類的建構函式,父類建構函式可以被隱式呼叫或者顯示呼叫
子類物件的構造: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 mo1 object mo2是組合關係,要對父類進行顯式的呼叫,該列印結果與上面所提的構造順序是相符的
c.子類物件的析構
析構函式的呼叫順序與建構函式相反
1.執行自身的析構函式
2.執行成員變數的析構函式
3.執行父類的析構函式
**示例
#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()
執行結果
小結:1.子類物件在建立時需要呼叫父類建構函式進行初始化
2.先執行父類建構函式然後執行成員的建構函式
3.父類建構函式顯示呼叫需要在初始化列表中進行
4.子類物件在銷毀時需要呼叫父類析構函式進行清理
5.析構函式與建構函式對稱相反
q:子類中是否可以定義父類的同名成員?如果可以?怎樣區分?如果不行,為什麼?
**示例
#include #include using namespace std;
class parent
;class child : public parent
;int main()
namespace b
class parent
};class child : public parent
};int main()
執行結果
可以從該段**的執行結果看出,通過位址值可以很清楚得看出,父類與子類到底呼叫的是哪個
b:再論過載
類中的成員函式可以進行過載
1.過載函式的本質為多個不同的函式
2.函式名域引數列表是唯一的標識
3.函式過載必須發生在同一作用域中
父子間函式過載實驗
**示例及執行結果
父子間的衝突
1.子類中的函式將隱藏父類的同名函式
2.子類無法過載父類中的成員函式
3.使用作用域分辨符訪問父類中的同名函式
4.子類可以定義父類中完全相同的成員函式
c 繼承中的構造與析構
問題 如何初始化父類成員?父類與子類的建構函式的關係?在子類物件構造時,需要呼叫父類建構函式對其繼承得來的成員進行初始化。在子類物件析構時,需要呼叫父類析構函式對其繼承得來的成員進行清理。繼承中的構造與析構呼叫規則 1.子類物件在建立時會首先呼叫父類的建構函式 2.父類建構函式執行結束後,執行子類的...
繼承中的構造與析構
賦值相容性原則 子類物件可以當作父類物件使用 子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 子類是就是特殊的父類!class child public parent int main int argc,char argv ...
C 繼承的構造與析構
父類建構函式在子類中的呼叫方式 顯示呼叫 父類建構函式的呼叫 class child public parent 顯示呼叫 child string s parent parameter to parent 舉個例子 include include using namespace std class...