C++复习笔记--继承和派生
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??-繼承和派生
一繼承(繼承就是從先輩處得到屬性和行為特征)
1?派生類的聲明
?class? 派生類名∶[繼承方式] 基類名
?{
??派生類新增的數據成員和成員函數
?};
2 基類成員在派生類中的訪問屬性
?
3?派生類對基類成員的訪問規則 1)內部訪問 由派生類中新增的成員函數對基類繼承來的成員的訪問 2)對象訪問 在派生類外部,通過派生類的對象對從基類繼承來的成員的訪問 3)1. 私有繼承的訪問規則
2)公有繼承的訪問規則
.
3)保護繼承的訪問規則
?
4 ?派生類的構造函數和析構函數
1)
派生類構造函數和析構函數的執行順 序
當創建派生類對象時:
????? 基類的構造函數---派生類的構造函數;
? 當撤消派生類對象時:
????? 派生類的析構函數---基類的析構函數。
注:當基類含有帶參數的構造函數時,派生類必須定義構造函數,并綴上“:基類名(參數表) ”,以提供把參數傳遞給基類構造函數的途徑。
派生類構造函數的一般格式為
派生類名(參數總表):基類名(參數表)
{
?? ?派生類新增成員的初始化語句
}
說明: ?(1)可以將派生類構造函數定義在類的外部,而在類體內只寫該函數的聲明
(2) 若基類使用不帶參數的構造函數或帶缺省參數的構造函數,則在派生類中定義構造函數時可略去“∶基類(參數表)”;
(3)如果派生類的基類也是一個派生類,每個派生類只需負責其直接基類的構造,依次上溯
(4)? ??在執行派生類的析構函數時,系統會自動調用基類的析構函數,對基類的對象進行清理
?
?
問題:當派生類中含有對象成員時,其構造函數應該如何構造?
? ? ? ? ?當派生類中含有對象成員時,其構造函數的一般形式為:
? ??派生類名(參數總表):基類名(參數表0),對象名成員1(參數表1),…,對象成員名n (參數表n)
? {
????? //派生類新增成員的初始化語句 ..
? }
即
? ?定義派生類對象時,構造函數的執行順序如下:
? ·調用基類的構造函數;
·調用對象成員的構造函數;
·執行派生類的構造函數體。
? ? ??撤消對象時,析構函數的調用順序與構造函數的調用順序正好相反。
?.調用派生類的析構函數;
?. 調用對象成員的析構函數;
?. 調用基類的析構函數
?
5?調整基類成員在派生類中的訪問屬性的其他方法
1)同名成員(C++語言允許在派生類中說明的成員與基類中的成員名字相同)
? ? ? ? ?為了在派生類中使用基類的同名成員,必須在該成員名之前加上基類名和作用域標 ?識符“::”,
??能否使私有繼承的派生類的對象訪問基類的公有成員或保護成員
訪問聲明:
??? 把基類的保護成員名或公有成員名直接寫到私有派生類定義式中的同名段中,
??? 同時在成員名前冠以“基類名∷”
例如:
?
#include<iostream.h>
?
class A{
?
? int x;
?
?public:
?
? A(int x1){x=x1;}
?
? void print( ){cout<<"x="<<x;} };
?
class B: private A{
?
? int y;
?
?public:
?
? B(int x1,int y1):A(x1){y=y1;}
?
? A::print; //訪問聲明
?
};
?
main( )
?
{ B b(10,20);
?
?b.print( );
?return 0;? }
說明:(1)訪問聲明中只能含不帶類型和參數的函數名或變量名
(2) 數據成員也可以使用訪問聲明
(3) 訪問聲明不能改變類成員在基類中原來的性質
?
?
二 多繼承與虛基類
1 多繼承(當一個派生類具有多個基類時,這種派生方法稱為多基派生或多繼承)
多重繼承聲明的一般形式如下:
class 派生類名:繼承方式1 基類名 1,…,??????? 繼承方式n 基類名n
{
??? 派生類新增的數據成員和成員函數
};
2? 多繼承派生類的構造函數與析構函數
?? 多繼承構造函數定義的一般形式如下:
派生類名(參數總表):基類名1(參數表1),基類名2(參數表2),…,基類名n(參數表)
?{
????? 派生類新增成員的初始化語句
?}
注:
多繼承構造函數的執行順序與單繼承構造函數的執行順序相同:
??? · 先執行基類的構造函數;
??? · 再執行對象成員的構造函數;
??? · 最后執行派生類構造函數。
??? 析構函數的執行順序則剛好與構造函數的執行順序相反。
3 虛基類
1)作用
?
如果一個派生類是從多個基類派生出來的,而這些基類又有一個共同的基類,
??? 則在這個派生類中訪問這個共同的基類中的成員時,可能會產生二義性
所以引入虛基類?使從不同的路徑繼承的基類的成員在內存中只擁有一個拷貝
?
?
?
?
?
轉載于:https://www.cnblogs.com/panpan-tostring/p/4593814.html
總結
以上是生活随笔為你收集整理的C++复习笔记--继承和派生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件架构的数据流总结(三)
- 下一篇: s3c2440移植MQTT