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