C++学习——继承
文章目錄
- 1.C++中類(lèi)成員的訪問(wèn)權(quán)限和繼承權(quán)限問(wèn)題
- 2.多繼承的優(yōu)缺點(diǎn)
- 3. 繼承機(jī)制中對(duì)象之間如何轉(zhuǎn)換
- 4.組合與繼承優(yōu)缺點(diǎn)
1.C++中類(lèi)成員的訪問(wèn)權(quán)限和繼承權(quán)限問(wèn)題
2.多繼承的優(yōu)缺點(diǎn)
C++允許為一個(gè)派生類(lèi)指定多個(gè)基類(lèi),這樣的繼承結(jié)構(gòu)被稱(chēng)做多重繼承。
多重繼承的優(yōu)點(diǎn)很明顯,就是對(duì)象可以調(diào)用多個(gè)基類(lèi)中的接口;
如果派生類(lèi)所繼承的多個(gè)基類(lèi)有相同的基類(lèi),而派生類(lèi)對(duì)象需要調(diào)用這個(gè)祖先類(lèi)的接口方法,就會(huì)容易出現(xiàn)二義性
加上全局符確定調(diào)用哪一份拷貝。比如pa.Author::eat()調(diào)用屬于Author的拷貝。
使用虛擬繼承,使得多重繼承類(lèi)Programmer_Author只擁有Person類(lèi)的一份拷貝。
3. 繼承機(jī)制中對(duì)象之間如何轉(zhuǎn)換
向上類(lèi)型轉(zhuǎn)換
將派生類(lèi)指針或引用轉(zhuǎn)換為基類(lèi)的指針或引用被稱(chēng)為向上類(lèi)型轉(zhuǎn)換,向上類(lèi)型轉(zhuǎn)換會(huì)自動(dòng)進(jìn)行,而且向上類(lèi)型轉(zhuǎn)換是安全的。
向下類(lèi)型轉(zhuǎn)換
將基類(lèi)指針或引用轉(zhuǎn)換為派生類(lèi)指針或引用被稱(chēng)為向下類(lèi)型轉(zhuǎn)換,向下類(lèi)型轉(zhuǎn)換不會(huì)自動(dòng)進(jìn)行,因?yàn)橐粋€(gè)基類(lèi)對(duì)應(yīng)幾個(gè)派生類(lèi),所以向下類(lèi)型轉(zhuǎn)換時(shí)不知道對(duì)應(yīng)哪個(gè)派生類(lèi),所以在向下類(lèi)型轉(zhuǎn)換時(shí)必須加動(dòng)態(tài)類(lèi)型識(shí)別技術(shù)。RTTI技術(shù),用dynamic_cast進(jìn)行向下類(lèi)型轉(zhuǎn)換。
4.組合與繼承優(yōu)缺點(diǎn)
繼承是Is a 的關(guān)系,比如說(shuō)Student繼承Person,則說(shuō)明Student is a Person。繼承的優(yōu)點(diǎn)是子類(lèi)可以重寫(xiě)父類(lèi)的方法來(lái)方便地實(shí)現(xiàn)對(duì)父類(lèi)的擴(kuò)展。
繼承的缺點(diǎn)有以下幾點(diǎn):
①:父類(lèi)的內(nèi)部細(xì)節(jié)對(duì)子類(lèi)是可見(jiàn)的。
②:子類(lèi)從父類(lèi)繼承的方法在編譯時(shí)就確定下來(lái)了,所以無(wú)法在運(yùn)行期間改變從父類(lèi)繼承的方法的行為。
③:如果對(duì)父類(lèi)的方法做了修改的話(比如增加了一個(gè)參數(shù)),則子類(lèi)的方法必須做出相應(yīng)的修改。所以說(shuō)子類(lèi)與父類(lèi)是一種高耦合,違背了面向?qū)ο笏枷搿?/p>
組合也就是設(shè)計(jì)類(lèi)的時(shí)候把要組合的類(lèi)的對(duì)象加入到該類(lèi)中作為自己的成員變量。
組合的優(yōu)點(diǎn):
①:當(dāng)前對(duì)象只能通過(guò)所包含的那個(gè)對(duì)象去調(diào)用其方法,所以所包含的對(duì)象的內(nèi)部細(xì)節(jié)對(duì)當(dāng)前對(duì)象時(shí)不可見(jiàn)的。
②:當(dāng)前對(duì)象與包含的對(duì)象是一個(gè)低耦合關(guān)系,如果修改包含對(duì)象的類(lèi)中代碼不需要修改當(dāng)前對(duì)象類(lèi)的代碼。
③:當(dāng)前對(duì)象可以在運(yùn)行時(shí)動(dòng)態(tài)的綁定所包含的對(duì)象。可以通過(guò)set方法給所包含對(duì)象賦值。
組合的缺點(diǎn):①:容易產(chǎn)生過(guò)多的對(duì)象。②:為了能組合多個(gè)對(duì)象,必須仔細(xì)對(duì)接口進(jìn)行定義。
總結(jié)
- 上一篇: Windows 7硬盘安装方法大全
- 下一篇: C++学习——模板