最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?多繼承詳情介紹

 更新時間:2022年03月02日 09:31:21   作者:?梁唐  
這篇文章主要介紹了C++?多繼承詳情,C++支持多繼承,即允許一個類同時繼承多個類。只有C++等少數(shù)語言支持多繼承,下面我們就來看看具體的多繼承介紹吧,需要的朋友可以參考一下

C++支持多繼承,即允許一個類同時繼承多個類。

關于多繼承,一直以來爭議不斷,有一部分人認為多繼承會帶來大量的問題,為了解決這些問題會使得語言本身變得非常復雜,因此應當避免。另外一派認為多繼承在某些場景下可以起到非常關鍵的作用,應當予以支持。

關于多重繼承是好是壞,這是一個非常復雜的問題,網(wǎng)上歷來爭議不斷。因此不過多闡述,感興趣的同學可以查閱一下相關資料。僅僅從實際支持來看,目前市面上大部分的語言包括Java僅支持單繼承,只有C++等少數(shù)語言支持多繼承。這和C++的理念也有關,即認定不能通過減少語言特性來增強語言的表達力。

看完爭議之后,我們來看看究竟什么是多繼承呢?

我們來看一段代碼案例:

class A{
public:
? ? void funcA();
};

class B{
private:
? ? bool funcB() const;
};

class C: public A, public B{ ... };

在這段代碼當中我們定義了兩個類A和B,然后我們創(chuàng)建了一個類C,同時繼承了A和B。這就是多繼承,這里要注意一點,我們必須用關鍵字public來限定每一個基類,否則的話編譯器會默認這是一個私有繼承。

如果我們稍微修改一下代碼,就會出現(xiàn)一些問題,比如:

class A{
public:
? ? void func();
};

class B{
private:
? ? bool func() const;
};

class C: public A, public B{ ... };

在上面這個例子當中A和B都包含了函數(shù)func,在下面的執(zhí)行語句當中會報錯。

C c;
c.func();

雖然B中的func函數(shù)是私有的,但對于編譯器來說依然是有歧義的。如果想要消除歧義,我們可以這樣調(diào)用c.A::func()。

當多繼承的父類擁有更高的繼承層級的時候,可能會出現(xiàn)更復雜的問題,比如多繼承菱形。也就是多個類之間的繼承關系構成了一個抽象意義上的菱形,

比如我們參考一下C++ Primer中的例子:

在上面這張圖當中,SingerWaiter都繼承了Worker,而SingingWaiter同時繼承了Singer和Waiter。從圖上來看,這似乎沒什么問題,但在實現(xiàn)上問題不少。

比如說,對于SingingWaiter類來說,它當中包含了多少Worker呢?

答案是有兩個,從Singer這邊繼承了一個Worker,從Waiter又繼承了一個Worker。

那么我們這樣寫就會出現(xiàn)問題:

SingingWaiter sw;
Worker *p = &sw;

通常這種賦值的時候,會將基類指針設置成派生類中基類對象的地址,但由于sw對象當中包含兩個Worker對象,有兩個地址,所以也會導致歧義。

我們可以使用強制轉換的方式消除歧義:

SingingWaiter sw;
Worker *p = (Singer*) &sw;
Worker *p = (Waiter*) &sw;

但顯然這樣的方法雖然能夠解決問題,

到此這篇關于C++ 多繼承詳情介紹的文章就介紹到這了,更多相關C++ 多繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c++選擇排序詳解

    c++選擇排序詳解

    選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從無序組的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在無序組的起始位置,無序組元素減少,有序組元素增加,直到全部待排序的數(shù)據(jù)元素排完。
    2017-05-05
  • C++ override關鍵字使用詳解

    C++ override關鍵字使用詳解

    這篇文章主要介紹了C++ override關鍵字使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    這篇文章主要為大家詳細介紹了通過OpenCV實現(xiàn)馬賽克和毛玻璃濾鏡效果與圖片的融合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • dev?c++的使用和調(diào)試方式

    dev?c++的使用和調(diào)試方式

    這篇文章主要介紹了dev?c++?的使用和調(diào)試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • sdl顯示一張bmp圖片示例

    sdl顯示一張bmp圖片示例

    這篇文章主要介紹了sdl顯示一張bmp圖片示例,需要的朋友可以參考下
    2014-04-04
  • 基于C++實現(xiàn)去除字符串頭尾指定字符功能

    基于C++實現(xiàn)去除字符串頭尾指定字符功能

    編程時我們經(jīng)常需要對字符串進行操作,其中有一項操作就是去除字符串的頭(尾)指定的字符,比如空格。本文為大家詳細介紹了如何利用C++實現(xiàn)這一效果,需要的可以參考一下
    2022-04-04
  • C++11計時器之chrono庫簡介

    C++11計時器之chrono庫簡介

    C++11有了chrono庫,可以在不同系統(tǒng)中很容易的實現(xiàn)定時功能,要使用chrono庫,需要#include,其所有實現(xiàn)均在std::chrono namespace下,本文給大家介紹C++11計時器:chrono庫介紹,感興趣的朋友一起看看吧
    2023-12-12
  • 新手小心:c語言中強符號與弱符號的使用

    新手小心:c語言中強符號與弱符號的使用

    本篇文章適合新手。是對c語言中強符號與弱符號的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中rapidjson將map轉為json的方法

    C++中rapidjson將map轉為json的方法

    今天小編就為大家分享一篇關于C++中rapidjson將map轉為json的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++ Qt開發(fā)之PushButton按鈕組件的使用詳解

    C++ Qt開發(fā)之PushButton按鈕組件的使用詳解

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文將重點介紹QPushButton按鈕組件的常用方法及靈活運用,感興趣的小伙伴可以學習一下
    2023-12-12

最新評論

南漳县| 河西区| 沙河市| 金秀| 青阳县| 大田县| 潼关县| 宁强县| 永年县| 大埔县| 深泽县| 高雄县| 泽库县| 临西县| 商南县| 广河县| 莆田市| 海林市| 宜君县| 宜兰市| 黄龙县| 郎溪县| 五河县| 滦平县| 永寿县| 成武县| 云浮市| 全南县| 邹平县| 龙井市| 汤原县| 云安县| 普陀区| 泸水县| 云龙县| 横山县| 大安市| 大余县| 灯塔市| 当涂县| 浦东新区|