當(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++語(yǔ)言的三大特性,而每次在談到繼承時(shí)我們不可避免的要談到一個(gè)很重要的問(wèn)題——菱形繼承。
a.菱形繼承是什么
如上圖,菱形繼承即多個(gè)類繼承了同一個(gè)公共基類,而這些派生類又同時(shí)被一個(gè)類繼承。這么做會(huì)引發(fā)什么問(wèn)題呢,讓我們來(lái)看一段代碼吧!
#includeusing 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)用不明確問(wèn)題,并且會(huì)造成數(shù)據(jù)冗余的問(wèn)題,明明可以只要一份就好,而我們卻保存了兩份。
那么我們可以怎樣解決呢?
第一種解決方法,使用域限定我們所需訪問(wèn)的函數(shù)
int main() { D d; d.A::fun(); d.B::fun(); getchar(); }
這樣的做法是沒(méi)有問(wèn)題的,但是,這樣做非常的不方便,并且當(dāng)程序十分大的時(shí)候會(huì)造成我們思維混亂
于是,C++給了我們一個(gè)別的解決方案——虛繼承
b.虛繼承
虛繼承是什么?
如上圖,虛繼承即讓A和B在繼承Base時(shí)加上virtural關(guān)鍵字,這里需要記住不是D使用虛繼承
那么,虛繼承又是怎么解決這些煩人的問(wèn)題的呢?
我們可看見在A和B中不再保存Base中的內(nèi)容,保存了一份偏移地址,然后將Base的數(shù)據(jù)保存在一個(gè)公共位置處這樣保證了數(shù)據(jù)冗余性的降低同時(shí),我們也能直接的使用d.fun()來(lái)調(diào)用Base里的fun函數(shù)。
#includeusing 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元起步,三天無(wú)理由+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)景需求。