一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C++入門(mén)到精通:面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承與派生!

 小世界的野孩子 2021-05-22

面向?qū)ο蟪绦蛟O(shè)計(jì)有4個(gè)主要特點(diǎn):抽象、封裝、繼承和多態(tài)性。本章主要介紹有關(guān)繼承的知識(shí),多態(tài)性將在后續(xù)章節(jié)中講解。

繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)最重要的特征,可以說(shuō),如果沒(méi)有掌握繼承性,就等于沒(méi)有掌握類和對(duì)象的精華,就是沒(méi)有掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的真諦。

繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等。

 

? 繼承關(guān)系舉例

萬(wàn)事萬(wàn)物中皆有繼承,是重要的現(xiàn)象。

案例:植物繼承圖


傳遞性:高等植物,蕨類植物,苔蘚都是植物,具有植物的共同特征。

不對(duì)稱性:不是所有植物都屬于菌類。

 

繼承是類之間定義的一種重要關(guān)系

    一個(gè)B類繼承A類,或者說(shuō)從A類派生B類;那么A類稱為基類(父類),B類稱為派生類(子類),像父子關(guān)系一樣。


 

has-A:類的組合;use-A:友元類,做函數(shù)參數(shù)傳遞;is-A:繼承。

 

? 派生類的定義

1、類繼承關(guān)系的語(yǔ)法

    class 派生類名:基類名列表

    {

//成員變量和成員函數(shù)聲明...

    }

2、基類名列表:

訪問(wèn)限定符 基類名1,訪問(wèn)限定符 基類名2...

3、訪問(wèn)限定符表示派生類對(duì)基類的繼承方式,使用關(guān)鍵字:

    ? public公有繼承

    ? private私有繼承

    ? protected保護(hù)繼承

派生類繼承了基類的全部成員變量和成員方法(除了構(gòu)造和析構(gòu)之外的成員方法),但是這些成員的訪問(wèn)屬性,在派生過(guò)程中是可以調(diào)整的。

 

? 繼承重要說(shuō)明和示例

說(shuō)明:

    1、子類擁有父類的所有成員變量和成員函數(shù);

    2、子類可以擁有父類沒(méi)有的方法和屬性;

    3、子類就是一種特殊的父類;

    4、子類對(duì)象可以當(dāng)作父類對(duì)象使用(在父類做函數(shù)形參時(shí),可以傳子類對(duì)象)。

實(shí)例:


 

 

? 派生類的訪問(wèn)控制

1、不同的繼承方式會(huì)改變繼承成員的訪問(wèn)屬性

    public繼承:父類成員在子類中保持原有訪問(wèn)級(jí)別;

    private繼承:父類成員在子類中變?yōu)閜rivate成員;

    protected繼承:父類中public成員會(huì)變成protected。

  父類中protected成員仍然為protected;父類中private成員仍然為private

 

2、private成員在子類中依然存在,但是卻無(wú)法訪問(wèn)到。不論種方式繼承,派生類都不能直接使用基類的私有成員 。(可以通過(guò)提供接口訪問(wèn))


 

類的繼承方式會(huì)影響父類的屬性在子類中的訪問(wèn)權(quán)限。

 

? 能否被訪問(wèn)、繼承方式選擇

1、如何判斷成員是否能被訪問(wèn):“三看”原則

    1> 看調(diào)用語(yǔ)句,是再寫(xiě)在子類的內(nèi)部還是外部;

    2> 看子類如何從父類繼承;

    3> 看父類訪問(wèn)級(jí)別。

 

2、派生類類成員訪問(wèn)級(jí)別設(shè)置的原則

思考:如何恰當(dāng)?shù)氖褂胮ublic,protected和private為成員聲明訪問(wèn)級(jí)別?

    1> 需要被外界訪問(wèn)的成員直接設(shè)置為public;

    2> 只能在當(dāng)前類中訪問(wèn)的成員設(shè)置為private;

    3> 只能在當(dāng)前類和子類中訪問(wèn)的成員設(shè)置為protected,protected成員的訪問(wèn)權(quán)限介于public和private之間。

    PS:一般情況下,均使用public繼承方式。

 

? 類型兼容性原則

類型兼容規(guī)則是指在需要基類對(duì)象的任何地方,都可以使用公有派生類的對(duì)象來(lái)替代。

通過(guò)公有繼承,派生類得到了基類中除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的所有成員。這樣,公有派生類實(shí)際就具備了基類的所有功能,凡是基類能解決的問(wèn)題,公有派生類都可以解決。

類型兼容規(guī)則中所指的替代包括以下情況:

    ? 子類對(duì)象可以當(dāng)作父類對(duì)象使用

    ? 子類對(duì)象可以直接賦值給父類對(duì)象

    ? 子類對(duì)象可以直接初始化父類對(duì)象

    ? 父類指針可以直接指向子類對(duì)象

    ? 父類引用可以直接引用子類對(duì)象

在替代之后,派生類對(duì)象就可以作為基類的對(duì)象使用,但是只能使用從基類繼承的成員。

類型兼容規(guī)則是多態(tài)性的重要基礎(chǔ)之一。

總結(jié):子類就是特殊的父類。

 

? 繼承中的構(gòu)造和析構(gòu)

1、問(wèn)題:子類如何初始化父類成員?父類與子類的構(gòu)造函數(shù)有什么關(guān)系?

    ☆ 在子類對(duì)象構(gòu)造時(shí),需要調(diào)用父類構(gòu)造函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行初始化。

    ☆ 在子類對(duì)象析構(gòu)時(shí),需要調(diào)用父類析構(gòu)函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行清理。


 

 

2、繼承中的構(gòu)造析構(gòu)調(diào)用原則

    ☆ 子類對(duì)象在創(chuàng)建時(shí)會(huì)首先調(diào)用父類的構(gòu)造函數(shù);

    ☆ 父類構(gòu)造函數(shù)執(zhí)行結(jié)束后,執(zhí)行子類的構(gòu)造函數(shù);

    ☆ 當(dāng)父類的構(gòu)造函數(shù)有參數(shù)時(shí),需要在子類的初始化列表中顯示調(diào)用;

    ☆ 析構(gòu)函數(shù)調(diào)用的先后順序與構(gòu)造函數(shù)相反。


 


? 繼承中同名成員處理方法

1、當(dāng)子類成員變量與父類成員變量同名時(shí),子類依然從父類繼承同名成員

2、在子類中通過(guò)作用域分辨符::進(jìn)行同名成員區(qū)分(在派生類中使用基類的同名成員,顯式地使用類名限定符)

3、同名成員存儲(chǔ)在內(nèi)存中的不同位置


 

總結(jié):同名成員變量和成員函數(shù)通過(guò)作用域分辨符進(jìn)行區(qū)分。

 

? 繼承中的static成員

繼承和static關(guān)鍵字在一起會(huì)產(chǎn)生什么現(xiàn)象?

    ? 基類定義的靜態(tài)成員,將被所有派生類共享

    ? 派生類中訪問(wèn)靜態(tài)成員,用以下形式顯式說(shuō)明:


 

接下來(lái)的內(nèi)容


 

 

? 多繼承

派生類只有一個(gè)基類,稱為單繼承(Single Inheritance)。除此之外,C++也支持多繼承(Multiple Inheritance),即一個(gè)派生類可以有兩個(gè)或多個(gè)基類。

多繼承容易讓代碼邏輯復(fù)雜、思路混亂,一直備受爭(zhēng)議,后來(lái)的 Java、C#、PHP 等干脆取消了多繼承。


 

 

? 多繼承的二義性

如果一個(gè)派生類從多個(gè)基類派生,而這些基類又有一個(gè)共同的基類,則在對(duì)該基類中聲明的名字進(jìn)行訪問(wèn)時(shí),可能產(chǎn)生二義性。

為了解決多繼承時(shí)的命名沖突和冗余數(shù)據(jù)問(wèn)題,C++ 提出了虛繼承,使得在派生類中只保留一份間接基類的成員。

使用關(guān)鍵字Virtual:


 

好啦,今天的學(xué)習(xí)就到此為止吧~明天繼續(xù)~


 

最后,不管你是轉(zhuǎn)行也好,初學(xué)也罷,進(jìn)階也可,如果你想學(xué)編程~

【值得關(guān)注】我的 C/C++編程學(xué)習(xí)交流俱樂(lè)部!【點(diǎn)擊進(jìn)入】

問(wèn)題答疑,學(xué)習(xí)交流,技術(shù)探討,還有超多編程資源大全,零基礎(chǔ)的視頻也超棒~(yú)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩成人动画在线观看| 亚洲av专区在线观看| 久草视频这里只是精品| 少妇激情在线免费观看| 91欧美日韩一区人妻少妇| 中文字幕91在线观看| 国产免费无遮挡精品视频| 国产精品久久女同磨豆腐| 熟妇人妻av中文字幕老熟妇| 粉嫩国产美女国产av| 国产精品福利一级久久| 黄色国产自拍在线观看| 日韩成人h视频在线观看| 在线观看国产成人av天堂野外| 国产永久免费高清在线精品 | 国产日本欧美特黄在线观看| 好吊视频一区二区在线| 中文字幕乱子论一区二区三区| 亚洲国产精品久久琪琪| 亚洲一区二区三区在线免费| 都市激情小说在线一区二区三区 | 亚洲国产精品一区二区毛片| 久草热视频这里只有精品| 成人精品日韩专区在线观看| 亚洲欧美日韩在线中文字幕| 成人欧美一区二区三区视频| 人妻一区二区三区多毛女| 伊人久久青草地婷婷综合| 欧美三级大黄片免费看| 日本高清视频在线观看不卡| 国产精品不卡免费视频| 精品国产亚洲一区二区三区| 美女黄色三级深夜福利| 精品国产一区二区欧美| 欧美中文日韩一区久久| 老司机精品国产在线视频| 中文人妻精品一区二区三区四区 | 久久综合亚洲精品蜜桃| 午夜成年人黄片免费观看| 伊人欧美一区二区三区| 在线观看视频日韩成人|