日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++学习——继承

發(fā)布時(shí)間:2024/7/19 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++学习——继承 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 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)題

  • 三種訪問(wèn)權(quán)限
  • public:用該關(guān)鍵字修飾的成員表示公有成員, 該成員不僅可以在類(lèi)內(nèi)可以被訪問(wèn),在類(lèi)外也是可以被訪問(wèn)的,是類(lèi)對(duì)外提供的可訪問(wèn)接口;private:用該關(guān)鍵字修飾的成員表示私有成員, 該成員僅在類(lèi)內(nèi)可以被訪問(wèn),在類(lèi)體外是隱藏狀態(tài);protected:用該關(guān)鍵字修飾的成員表示保護(hù)成員, 保護(hù)成員在類(lèi)體外同樣是隱藏狀態(tài),但是對(duì)于該類(lèi)的派生類(lèi)來(lái)說(shuō),相當(dāng)于公有成員,在派生類(lèi)中可以被訪問(wèn)。
  • 三種繼承方式
  • 若繼承方式是public,基類(lèi)成員在派生類(lèi)中的訪問(wèn)權(quán)限保持不變, 也就是說(shuō),基類(lèi)中的成員訪問(wèn)權(quán)限,在派生類(lèi)中仍然保持原來(lái)的訪問(wèn)權(quán)限;若繼承方式是private,基類(lèi)所有成員在派生類(lèi)中的訪問(wèn)權(quán)限都會(huì)變?yōu)樗接?span id="ozvdkddzhkzd" class="token punctuation">(private)權(quán)限;若繼承方式是protected,基類(lèi)的共有成員和保護(hù)成員在派生類(lèi)中的訪問(wèn)權(quán)限都會(huì)變?yōu)楸Wo(hù)(protected)權(quán)限, 私有成員在派生類(lèi)中的訪問(wèn)權(quán)限仍然是私有(private)權(quá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é)

    以上是生活随笔為你收集整理的C++学习——继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。