C++ 虛基類(lèi)

注意:本文中代碼均使用 Qt 開(kāi)發(fā)編譯環(huán)境

《虛基類(lèi)》

當(dāng)某類(lèi)的部分或者全部直接基類(lèi)是從另一個(gè)共同基類(lèi)派生而來(lái)時(shí)焦辅,在這些直接基類(lèi)中田篇,從上級(jí)共同基類(lèi)繼承來(lái)的成員就擁有相同的名稱(chēng)。在派生類(lèi)的對(duì)象中,這些同名數(shù)據(jù)成員在內(nèi)存中同時(shí)擁有多個(gè)拷貝,同一函數(shù)名會(huì)有多個(gè)映射陌选。我們可以用作用域分辨符來(lái)唯一標(biāo)識(shí)并分別訪問(wèn)它們。

也可以將共同的基類(lèi)設(shè)置為虛基類(lèi)蹄溉,這時(shí)從不同的路徑繼承過(guò)來(lái)的同名數(shù)據(jù)成員在內(nèi)存中就只有一個(gè)拷貝咨油,同一個(gè)函數(shù)名也只有一個(gè)映射。

語(yǔ)法:

class 派生類(lèi)名:virtual 繼承方式 基類(lèi)名

上述語(yǔ)句聲明基類(lèi)為派生類(lèi)的虛基類(lèi)柒爵。在多繼承情況下役电,虛基類(lèi)關(guān)鍵字的作用范圍和繼承方式關(guān)鍵字相同,只對(duì)緊跟其后的基類(lèi)起作用棉胀。聲明了虛基類(lèi)以后法瑟,虛基類(lèi)的成員在進(jìn)一步派生的過(guò)程中和派生類(lèi)一起維護(hù)同一個(gè)內(nèi)存數(shù)據(jù)拷貝。

舉例:

#include <QCoreApplication>
#include <QDebug>

class B0 {
public:
    int nV;
    void fun(){qDebug()<<"Memberof B0 and nV = "<<nV;}
};

class B1 : virtual public B0 {
public:
    int nV1;
};

class B2 : virtual public B0 {
public:
    int nV2;
};

class C : public B1, public B2 {
public:
    int nVc;
    void fun(){qDebug()<<"Memberof C";}
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    C c1;
    c1.B1::nV = 2;
    c1.B1::fun();
    c1.B2::nV = 3;
    c1.B2::fun();
    c1.B1::fun();

    return a.exec();
}

運(yùn)行結(jié)果:


運(yùn)行結(jié)果

《虛基類(lèi)及其派生類(lèi)構(gòu)造函數(shù)》

如果虛基類(lèi)聲明有非默認(rèn)形式的(即帶形參的)構(gòu)造函數(shù)唁奢,并且沒(méi)有聲明默認(rèn)形式的構(gòu)造函數(shù)霎挟,這時(shí),在整個(gè)繼承關(guān)系中驮瞧,直接或者間接繼承虛基類(lèi)的所有派生類(lèi)氓扛,都必須在構(gòu)造函數(shù)的成員初始化表中列出對(duì)虛基類(lèi)的初始化枯芬。

例如论笔,示例:

#include <QCoreApplication>
#include <QDebug>

class B0 {
public:
    B0(int n){nV = n;}
    int nV;
    void fun(){qDebug()<<"Memberof B0 and nV = "<<nV;}
};

class B1 : virtual public B0 {
public:
    B1(int a):B0(a){}
    int nV1;
};

class B2 : virtual public B0 {
public:
    B2(int a):B0(a){}
    int nV2;
};

class C : public B1, public B2 {
public:
    C(int a):B0(a),B1(a),B2(a){}
    int nVc;
    void fun(){qDebug()<<"Memberof C";}
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    C c1(1);
    c1.B1::fun();
    c1.B2::fun();
    c1.fun();
    c1.B1::nV = 2;
    c1.B1::fun();
    c1.B2::nV = 3;
    c1.B2::fun();
    c1.B1::fun();

    return a.exec();
}

運(yùn)行結(jié)果:


運(yùn)行結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末采郎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狂魔,更是在濱河造成了極大的恐慌蒜埋,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最楷,死亡現(xiàn)場(chǎng)離奇詭異整份,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)籽孙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)烈评,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人犯建,你說(shuō)我怎么就攤上這事讲冠。” “怎么了适瓦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵竿开,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我玻熙,道長(zhǎng)否彩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任嗦随,我火速辦了婚禮列荔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枚尼。我一直安慰自己肌毅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布姑原。 她就那樣靜靜地躺著悬而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锭汛。 梳的紋絲不亂的頭發(fā)上笨奠,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音唤殴,去河邊找鬼般婆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朵逝,可吹牛的內(nèi)容都是我干的蔚袍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啤咽!你這毒婦竟也來(lái)了晋辆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宇整,失蹤者是張志新(化名)和其女友劉穎瓶佳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鳞青,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霸饲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臂拓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厚脉。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胶惰,靈堂內(nèi)的尸體忽然破棺而出器仗,到底是詐尸還是另有隱情,我是刑警寧澤童番,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布精钮,位于F島的核電站,受9級(jí)特大地震影響剃斧,放射性物質(zhì)發(fā)生泄漏轨香。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一幼东、第九天 我趴在偏房一處隱蔽的房頂上張望臂容。 院中可真熱鬧,春花似錦根蟹、人聲如沸脓杉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)球散。三九已至,卻和暖如春散庶,著一層夾襖步出監(jiān)牢的瞬間蕉堰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工悲龟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屋讶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓须教,卻偏偏與公主長(zhǎng)得像皿渗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容