亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++深入探究不同的繼承體系

 更新時間:2022年05月25日 08:35:34   作者:Suk-god  
繼承是C++面向?qū)ο缶幊讨械囊婚T。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對父類的允許訪問的方法實行的過程進行重新編寫,返回值和形參都不能改變。就是對原本的父類進行重新編寫,但是外部接口不能被重寫

聲明:

本文的測試環(huán)境為Windows平臺下的VS2013環(huán)境

單繼承

一個子類只有一個父類。這類繼承方式是最為簡單的。具體可以參考繼承 上篇中的例子。這里給出簡單的圖示即可:

多繼承

一個子類有兩個或兩個以上的直接父類,這樣的繼承關(guān)系稱之為多繼承。

圖解:

注意事項:

 ①在多繼承的場景下,建議在繼承的每一個基類名稱前都加上繼承方式,如果不加,可能無法達到我們的預期結(jié)果。

 結(jié)論:

  class修飾的類,如果不顯式添加繼承方式,默認是private

  struct修飾的類,如果不顯式添加繼承方式,默認是public

②多繼承的對象模型隨著子類繼承基類的順序變化而變化

該如何理解上面這句話呢?

來看這兩種情況:

Ⅰ、先繼承Base1,再繼承Base2

Ⅱ、先繼承Base2,再繼承Base1

菱形繼承

概念

了解了上面的兩種繼承方式,下面我們介紹一種單繼承與多繼承有機結(jié)合的產(chǎn)品,他就是菱形繼承!

它的圖解如下:

存在的問題

1、存在二義性問題

 最頂層基類成員在最底層子類中存在兩份,如果直接通過最底層子類訪問最頂層的基類成員時,會出現(xiàn)訪問不明確問題。

2、存在數(shù)據(jù)冗余問題

我們來分析一下最底層子類的對象模型:

這里的最頂層基類為了說明問題,只有一個成員變量,但是實際中基類中的內(nèi)容往往很多,數(shù)據(jù)量很大。如果不解決這個問題,那將會存在著嚴重的空間浪費。這是不允許的!

解決方案

解決辦法:

可見,讓訪問明確化并不能直接解決問題!而真正能夠解決問題的是采用菱形虛擬繼承。這個接下來就會介紹到。

菱形虛擬繼承

什么是菱形虛擬繼承?

我們先不著急回答這個問題,首先我們應該搞明白什么是虛擬繼承!!

虛擬繼承

什么是虛擬繼承

使用虛擬關(guān)鍵字virtual修飾的繼承稱之為虛擬繼承

 虛擬繼承存在的意義就是 :為了解決菱形繼承存在的二義性和數(shù)據(jù)冗余的問題

內(nèi)存層面理解虛擬繼承

虛擬繼承和普通單繼承的區(qū)別

主要有4點,具體如下:

虛擬繼承+菱形繼承

菱形虛擬繼承實現(xiàn)如下:

也即:

class Base
{
protected:
	int _b;
};
class Derived1 : virtual public Base
{
protected:
	int _d1;
};
class Derived2 : virtual public Base
{
protected:
	int _d2;
};
class D : public Derived1, public Derived2
{
public:
	D()
	{
	}
	void Func()
	{
		_b = 1;
		_d1 = 2;
		_d2 = 3;
	}
protected:
	int _dd;
};
int main()
{
	D d;
	d.Func();
	return 0;
}

分析執(zhí)行過程及d的對象模型:

總結(jié):菱形虛擬繼承是通過讓最頂層基類的成員在最底層子類中只存儲一份的方式來解決的。

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

相關(guān)文章

  • C語言算法積累圖的遍歷鄰接表簡單路徑

    C語言算法積累圖的遍歷鄰接表簡單路徑

    這篇文章主要為大家介紹了C語言算法積累圖的遍歷鄰接表簡單路徑實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • c++ primer中的const限定符

    c++ primer中的const限定符

    這篇文章主要介紹了c++ primer中的const限定符,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 學好C++必須做到的50條 絕對經(jīng)典!

    學好C++必須做到的50條 絕對經(jīng)典!

    學好C++必須做到的50條,絕對經(jīng)典!想要學好C++的朋友一定要認真閱讀本文,更要做到以下50條
    2016-09-09
  • C/C++內(nèi)存管理詳情

    C/C++內(nèi)存管理詳情

    這篇文章主要通過描述了C/C++內(nèi)存分布、C/C++的一些函數(shù)理方面來展開C/C++內(nèi)存管理的內(nèi)容,需要的朋友請參考下文
    2021-08-08
  • C語言詳解Z字形變換排列的實現(xiàn)

    C語言詳解Z字形變換排列的實現(xiàn)

    Z字形變換排列就是指將一個給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進行 Z 字形排列,下面讓我們用C語言來實現(xiàn)
    2022-04-04
  • C++中MFC Tab Control控件的使用詳解

    C++中MFC Tab Control控件的使用詳解

    這篇文章主要介紹了C++中MFC Tab Control控件的使用詳解的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語言一級指針二級指針和三級指針區(qū)別及使用詳解

    C語言一級指針二級指針和三級指針區(qū)別及使用詳解

    這篇文章主要為大家介紹了C語言一級指針二級指針和三級指針,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 基于C++實現(xiàn)五子棋小游戲

    基于C++實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言如何實現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))

    C語言如何實現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))

    這篇文章主要介紹了C語言如何實現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容解決

    VC++?2019?"const?char*"類型的實參與"LPCTSTR"

    這篇文章主要給大家介紹了關(guān)于VC++?2019?"const?char*"類型的實參與"LPCTSTR"類型的形參不兼容的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-03-03

最新評論