欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?多繼承詳情介紹

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

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

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

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

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

我們來看一段代碼案例:

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

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

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

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

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

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

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

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

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

C c;
c.func();

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

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

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

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

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

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

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

SingingWaiter sw;
Worker *p = &sw;

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

我們可以使用強制轉(zhuǎn)換的方式消除歧義:

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

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

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

相關(guān)文章

  • C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼

    C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼

    這篇文章主要介紹了C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C語言實現(xiàn)簡單掃雷游戲

    C語言實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言中調(diào)用Swift函數(shù)實例詳解

    C語言中調(diào)用Swift函數(shù)實例詳解

    這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實例詳解的相關(guān)資料,實現(xiàn)該功能可以通過定義全局的指向Blocks的對象指針來實現(xiàn),需要的朋友可以參考下
    2017-07-07
  • C++實現(xiàn)職工信息管理系統(tǒng)

    C++實現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了c++實現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++簡明講解類型轉(zhuǎn)換的使用與作用

    C++簡明講解類型轉(zhuǎn)換的使用與作用

    類型轉(zhuǎn)換(type?cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細了解
    2022-04-04
  • 基于C++ Lambda表達式的程序優(yōu)化

    基于C++ Lambda表達式的程序優(yōu)化

    這篇文章主要介紹了基于C++ Lambda表達式的程序優(yōu)化的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • C語言中的內(nèi)聯(lián)函數(shù)(inline)與宏定義(#define)詳細解析

    C語言中的內(nèi)聯(lián)函數(shù)(inline)與宏定義(#define)詳細解析

    內(nèi)聯(lián)函數(shù)與宏本質(zhì)上是兩個不同的概念如果程序編寫者對于既要求快速,又要求可讀的情況下,則應(yīng)該將函數(shù)冠以inline
    2013-09-09
  • VS Code 中搭建 Qt 開發(fā)環(huán)境方案分享

    VS Code 中搭建 Qt 開發(fā)環(huán)境方案分享

    這篇文章主要介紹了VS Code 中搭建 Qt 開發(fā)環(huán)境方案分享的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C++ string替換指定字符實例代碼

    C++ string替換指定字符實例代碼

    這篇文章主要給大家介紹了關(guān)于C++ string替換指定字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • C++迷宮問題的求解算法

    C++迷宮問題的求解算法

    這篇文章主要為大家詳細介紹了C++迷宮問題的求解算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論