為了解決從不同途徑繼承來(lái)的同名的數(shù)據(jù)成員在內(nèi)存中有不同的拷貝造成數(shù)據(jù)不一致問(wèn)題,將共同基類設(shè)置為虛基類。這時(shí)從不同的路徑繼承過(guò)來(lái)的同名數(shù)據(jù)成員在內(nèi)存中就只有一個(gè)拷貝,同一個(gè)函數(shù)名也只有一個(gè)映射。這樣不僅就解決了二義性問(wèn)題,也節(jié)省了內(nèi)存,避免了數(shù)據(jù)不一致的問(wèn)題。 class 派生類名:virtual 繼承方式 基類名 virtual是關(guān)鍵字,聲明該基類為派生類的虛基類。 在多繼承情況下,虛基類關(guān)鍵字的作用范圍和繼承方式關(guān)鍵字相同,只對(duì)緊跟其后的基類起作用。 聲明了虛基類之后,虛基類在進(jìn)一步派生過(guò)程中始終和派生類一起,維護(hù)同一個(gè)基類子對(duì)象的拷貝
#include<iostream>using namespace std;int gFlag = 0;class Base{public: Base() { cout << "Base called : " << gFlag++ << endl; } void PRint() { cout << "Base print" << endl; }};class Mid1 : virtual public Base{public: Mid1() { cout << "Mid1 called" << endl; }};class Mid2 : virtual public Base{public: Mid2() { cout << "Mid2 called" << endl; }};class Child :public Mid1, public Mid2{public: Child() { cout << "Child called" << endl; }};int main(){ Child d; d.print();}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注