中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++之菱形繼承-創(chuàng)新互聯(lián)

當(dāng)我們談C++時(shí),我們談些什么?

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供芒市企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為芒市眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

    封裝,繼承,多態(tài)。這是C++語言的三大特性,而每次在談到繼承時(shí)我們不可避免的要談到一個(gè)很重要的問題——菱形繼承。

a.菱形繼承是什么

C++之菱形繼承

    如上圖,菱形繼承即多個(gè)類繼承了同一個(gè)公共基類,而這些派生類又同時(shí)被一個(gè)類繼承。這么做會(huì)引發(fā)什么問題呢,讓我們來看一段代碼吧!

#include<iostream>
using namespace std;
class Base
{
protected:
	int _base;
public:
	void fun()
	{
		cout << "Base::fun" << endl;
	}
};

class A:public Base
{
protected:
	int _a;
};

class B : public Base
{
protected:
	int _b;
};
class D :public A, public B
{
private:
	int _d;
};
int main()
{
	D d;
	d.fun();//編譯器報(bào)錯(cuò):調(diào)用不明確
	getchar();
}

    我們可以看見D的對(duì)象模型里面保存了兩份Base,當(dāng)我們想要調(diào)用我們從Base里繼承的fun時(shí)就會(huì)出現(xiàn)調(diào)用不明確問題,并且會(huì)造成數(shù)據(jù)冗余的問題,明明可以只要一份就好,而我們卻保存了兩份。

    那么我們可以怎樣解決呢?

    第一種解決方法,使用域限定我們所需訪問的函數(shù)

int main()
{
	D d;
	d.A::fun();
	d.B::fun();
	getchar();
}

    這樣的做法是沒有問題的,但是,這樣做非常的不方便,并且當(dāng)程序十分大的時(shí)候會(huì)造成我們思維混亂

    于是,C++給了我們一個(gè)別的解決方案——虛繼承

b.虛繼承

    虛繼承是什么?

C++之菱形繼承

  如上圖,虛繼承即讓A和B在繼承Base時(shí)加上virtural關(guān)鍵字,這里需要記住不是D使用虛繼承

    那么,虛繼承又是怎么解決這些煩人的問題的呢?

C++之菱形繼承

    我們可看見在A和B中不再保存Base中的內(nèi)容,保存了一份偏移地址,然后將Base的數(shù)據(jù)保存在一個(gè)公共位置處這樣保證了數(shù)據(jù)冗余性的降低同時(shí),我們也能直接的使用d.fun()來調(diào)用Base里的fun函數(shù)。

#include<iostream>
using namespace std;
class Base
{
protected:
	int _base;
public:
	void fun()
	{
		cout << "Base::fun" << endl;
	}
};

class A:virtual public Base
{
protected:
	int _a;
};

class B :virtual public Base
{
protected:
	int _b;
};
class D :public A, public B
{
private:
	int _d;
};
int main()
{
	D d;
	d.fun();
	getchar();
}

    *虛繼承和虛函數(shù)是完全不同的兩個(gè)概念,希望大家不要隨意搞混,想要了解虛函數(shù)的同學(xué)可以看看博主的另一篇博文《C++的繼承&多態(tài)》http://zimomo.blog.51cto.com/10799874/1752936

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前題目:C++之菱形繼承-創(chuàng)新互聯(lián)
分享路徑:http://www.rwnh.cn/article0/doepoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、網(wǎng)站制作、網(wǎng)站營(yíng)銷、企業(yè)網(wǎng)站制作關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
凤阳县| 北京市| 喀什市| 红原县| 佛山市| 肃宁县| 望城县| 琼中| 建始县| 泽州县| 禹州市| 谢通门县| 新晃| 长垣县| 西畴县| 金溪县| 从化市| 疏附县| 宁远县| 黄冈市| 嘉峪关市| 玉田县| 卢湾区| 沾化县| 饶河县| 天峨县| 永兴县| 余姚市| 昔阳县| 东港市| 青冈县| 巴塘县| 汽车| 建阳市| 桐庐县| 锦屏县| 平乐县| 莲花县| 台南市| 陇西县| 恩平市|