欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

菱形的虛擬繼承

問題引入:

創(chuàng)新互聯(lián)長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高縣企業(yè)提供專業(yè)的網(wǎng)站制作、做網(wǎng)站,高縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

   如果有Base類,B1類,B2類,D類,如下圖繼承關(guān)系

   菱形的虛擬繼承

那么按一般的繼承來看,D類創(chuàng)造的對(duì)象會(huì)繼承B1類的方法與成員,同時(shí)也會(huì)繼承B2類的方法與成員;

接下來類B1 , B2 會(huì)分別去繼承Base類的方法與成員,那么D類的對(duì)象在調(diào)用Base類的方法時(shí),到底是繼承B1類這邊的Base,還是會(huì)繼承B2類這邊的Base,此時(shí)就會(huì)產(chǎn)生二義性

 

為了解決這個(gè)問題,就看看虛擬繼承是怎么來解決這個(gè)二義性問題的

  1.  菱形的虛擬繼承的源代碼


#include <iostream>

using namespace std;

class Base

{

public:

Base()

{

cout << "Base()  " << this << endl;

}

~Base()

{

cout << "~Base()  " << this << endl;

}

int m_data1;

};

class B1 : virtual public Base

{

public:

B1()

{

cout << "B1()  " << this << endl;

}

~B1()

{

cout << "~B1()  " << this << endl;

}

int m_data2;

};

class B2 : virtual public Base

{

public:

B2()

{

cout << "B2()  " << this << endl;

}

~B2()

{

cout << "~B2()  " << this << endl;

}

int m_data3;

};

class D : public B1, public B2

{

public:

D()

{

B1::m_data2 = 0x1;

B1::m_data1 = 0x2;

B2::m_data3 = 0x3;

B2::m_data1 = 0x4;

m_data4 = 0x5;

cout << "D()" << this << endl;

}

~D()

{

cout << "~D()  " << this << endl;

}

int m_data4;

};

void Test()

{

D d;

//cout << sizeof(D) << endl;   //24

}

int main()

{

Test();

getchar();

return 0;

}


2.斷點(diǎn)打到D類的構(gòu)造函數(shù)這條語句B1::m_data2 = 0x1;運(yùn)行完D類構(gòu)造函數(shù)后調(diào)試。

 內(nèi)存1中的地址欄輸入&d可以看到類D對(duì)象的模型(取&d因?yàn)樵赥est()函數(shù)創(chuàng)建的是D類的d對(duì)象)

菱形的虛擬繼承

3.接下來問題就來了,明明是取D類對(duì)象d的地址,為什么這個(gè)地址下有存儲(chǔ)了地址,里面到底是什么東  西,那就看看吧,(可以看看反匯編和相應(yīng)的內(nèi)存)

菱形的虛擬繼承

此處可以看到它的地址偏移4個(gè)字節(jié)中存儲(chǔ)了0X 00 00 00 14

(這個(gè)數(shù)據(jù)有什么意義哪?)

在看看反匯編就可以了解到編譯器到底在搞什么鬼

菱形的虛擬繼承

看看在給m_data1賦值時(shí),也就是給類Base數(shù)據(jù)賦值時(shí),是什么情況

—————————————————————————————————

第一步 取得this指針給寄存器eax

第二步 將寄存器eax中內(nèi)容(即地址 (0x 00 B7 DC C8))給 ecx

第三步 將寄存器exc中內(nèi)容加4 (即 地址(0x 00 B7 DC CC))后,取其地址內(nèi)容給edx(內(nèi)容為 0X 00 00 00 14)

第四步 取this指針給寄存器eax

第五步 eax + edx 的結(jié)果為 (0x 00 30 FD 60 +  0X 00 00 00 14 = 0x 00 30 FD 74),接下來將數(shù)據(jù)2

     存放到這個(gè)地址下 

——————————————————————————————————————

從模型圖可以看到地址(0x 00 30 FD 74)就是Base類的地址

為什么存放的是數(shù)據(jù)2,但是結(jié)果是4,這就要看清楚了,下面還有條語句未執(zhí)行,

那就是  B2::m_data1 = 0x4; 

這就是菱形虛擬繼承下為了不產(chǎn)生二義性的奧妙

(D類繼承Base類的方法與成員,編譯器在內(nèi)存中只開辟了一塊)

文章題目:菱形的虛擬繼承
文章路徑:http://aaarwkj.com/article26/pcodcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站收錄、網(wǎng)站改版、虛擬主機(jī)、App開發(fā)、小程序開發(fā)

廣告

聲明:本網(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)站優(yōu)化排名
亚洲av区一区二区三| 欧美一区二区三区人妻激情| 成人日韩av免费在线观看| 免费亚洲一区二区三区| 男女真人啪啪视频免费| 日本束缚人妻一区二区三区| 亚洲国产日韩精品一区二| 亚洲精品日韩国产3区| 亚洲永久免费黄色av| 日韩欧美一区二区在线播放| 日韩女同性一区二区三区| 日本中文字幕激情在线| 美女诱惑福利视频久久久| 午夜在线免费观看小视频| 日韩电影中文字幕一区| 欧美成人高清在线播放| 久久久精品免费中文视频| 日韩欧美黄网站免费看| 91午夜福利国产在线观看| 麻豆久久精品国产亚洲精品超碰热| 丰满肥臀熟女高清区二区| 欧美精品国产亚洲另类| 女同一区二区三区在线| 国产精品成人亚洲一区二区| 欧美日本国产高清不卡| 七十二式性日韩视频| 日韩精品一区二区毛片| 国产二区日韩成人精品| 福利av一区二区三区| 亚洲精品麻豆一区二区| 国产日韩精品国产二区| 老色鬼久久亚洲av综合| 青青草青娱乐免费在线视频| 日韩中文字幕综合不卡| 亚洲一区二区中文字幕av | 国产成人拍国产亚洲精品| 黄色一级日本黄色一级| 欧美精品一区二区三区乱码| 传媒视频在线观看网站| 久久碰国产一区二区三区| 啊啊舒服爽用力爱我视频|