C++ 笔记(31)— 类继承
1. 私有和保護(hù)
成員函數(shù)或成員數(shù)據(jù)可以是公有或者私有的。如果是公有的,那么它們可以被直接訪問(wèn);如果是私有的,那么它們無(wú)法被直接訪問(wèn)。同時(shí),還有一個(gè) protected 保留字,在沒(méi)有使用繼承的時(shí)候,它與 private 的效果是一樣的,即無(wú)法被直接訪問(wèn)。如果使用了繼承,我們就能體會(huì)到 protected 和 private 的差別。
 ?
private(私有)和 protected(保護(hù))都能實(shí)現(xiàn)類的封裝性。
- private能夠?qū)ν獠亢妥宇惐C?#xff0c;即除了成員所在的類本身可以訪問(wèn)之外,別的都不能直接訪問(wèn);
- protected能夠?qū)ν獠勘C?#xff0c;但允許子類直接訪問(wèn)這些成員;
public、private 和 protected 對(duì)成員數(shù)據(jù)或成員函數(shù)的保護(hù)程度可以用下表來(lái)描述:
 ?
 
 在使用繼承之前,我們必須保證父類是已經(jīng)定義好的。如果父類是虛無(wú)的、沒(méi)有被定義的,那么子類也就沒(méi)什么好繼承的了。定義一個(gè)子類的語(yǔ)法格式為:
class 子類名:繼承方式 父類名;
2. 繼承方式
public 是公有繼承,或稱為類型繼承。它主要體現(xiàn)的是概念的延伸和擴(kuò)展,父類所有的公有、保護(hù)成員都將按部就班地繼承到子類中。父類的公有成員在子類中依然是公有的,父類的保護(hù)成員在子類中依然是保護(hù)的。
 ?
private 是私有繼承,或稱為私有的實(shí)現(xiàn)繼承。它主要體現(xiàn)的是父類成員的重用。父類所有的公有、保護(hù)成員繼承到子類時(shí),類型會(huì)發(fā)生改變。父類的公有成員在子類中變成了私有成員,父類的保護(hù)成員在子類中也變成了私有成員。這時(shí),我們可以利用從父類繼承而來(lái)的成員函數(shù)來(lái)實(shí)現(xiàn)子類的成員函數(shù),并且不必?fù)?dān)心外部直接訪問(wèn)父類的成員函數(shù),破壞了子類的秩序。
 ?
protected 是保護(hù)繼承,或稱為保護(hù)的實(shí)現(xiàn)繼承。與私有繼承類似,它也是體現(xiàn)父類成員的重用。只不過(guò)父類的公有成員和保護(hù)成員在子類中都變成了保護(hù)成員。因此,如果有一個(gè)孫類繼承了子類,那么父類中的成員也將被繼承,成為孫類的保護(hù)成員。
 ?
public、private 和 protected 三種繼承方式可以用下表描述。其中右下角的九個(gè)單元格表示各種父類成員在對(duì)應(yīng)的繼承方式下,成為子類成員后的性質(zhì)。
 ?
 
3. 子類對(duì)象的構(gòu)造
我們了解到當(dāng)一個(gè)對(duì)象的成員數(shù)據(jù)是另一個(gè)對(duì)象的時(shí)候,就先運(yùn)行成員對(duì)象的構(gòu)造函數(shù),再運(yùn)行父對(duì)象的構(gòu)造函數(shù)。但是繼承的出現(xiàn),會(huì)引入子類的構(gòu)造函數(shù)。這時(shí)候,這些構(gòu)造函數(shù)的運(yùn)行順序又是怎樣的呢?
 ?
?
?
根據(jù)程序的運(yùn)行結(jié)果,我們可以確定,父類的成員對(duì)象仍然是最先構(gòu)造的,接著是運(yùn)行父類的構(gòu)造函數(shù),最后運(yùn)行子類的構(gòu)造函數(shù)。也就是說(shuō)子類對(duì)象是在父類對(duì)象的基礎(chǔ)上擴(kuò)展而成的。
另外,如果我們希望把子類的構(gòu)造函數(shù)的參數(shù)傳遞給父類的構(gòu)造函數(shù)時(shí),可以在子類的構(gòu)造函數(shù)定義中用以下格式調(diào)用父類的構(gòu)造函數(shù):
子類名::構(gòu)造函數(shù)名(參數(shù)表):父類名(參數(shù)表)
猜想父類、父類成員對(duì)象、子類和子類成員對(duì)象的構(gòu)造函數(shù)運(yùn)行順序,并設(shè)法驗(yàn)證。
 結(jié)論:順序依次為父類成員對(duì)象、父類、子類成員對(duì)象、子類。各成員對(duì)象的構(gòu)造順序參照它們?cè)陬愔新暶鞯捻樞颉?/strong>
 ?
4. 子類對(duì)象的析構(gòu)
我們就說(shuō)它的運(yùn)行順序往往是和構(gòu)造函數(shù)的運(yùn)行順序相反的。那么使用了繼承之后,是否依然是這樣的規(guī)律呢?
 ?
使用了繼承之后,析構(gòu)函數(shù)的運(yùn)行順序依然恰好與構(gòu)造函數(shù)的運(yùn)行順序相反。
總結(jié)
以上是生活随笔為你收集整理的C++ 笔记(31)— 类继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 2022-2028年中国塑料编织品的制造
- 下一篇: 2022-2028年中国塑料绳的制造行业
