欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于C++多重繼承下虛表結(jié)構(gòu)的問題

 更新時(shí)間:2021年09月10日 10:37:49   作者:不會(huì)寫代碼的絲麗  
這篇文章主要介紹了C++ 多重繼承下虛表結(jié)構(gòu)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

昨天寫一個(gè)項(xiàng)目時(shí)遇到一個(gè)很詭異的現(xiàn)象 如下代碼所示:

class ParentA {
public :
	int a=0x123456;
	virtual void vFunParentA(){
		std::cout << "vFunParentA" << std::endl;
	}
};
class ParentB {
public:
	int b = 0x456;
	virtual void vFunParentB() {
		std::cout<<"vFunParentB"<<std::endl;
		int i = 0;
	}
};
class Child:public ParentA,public ParentB {
	int c = 0x789;
};
int main()
{

	//注意這里使用void*
	void* pChild = new Child;
	//強(qiáng)轉(zhuǎn)
	ParentB* pParentB = (ParentB*)pChild;
	//強(qiáng)轉(zhuǎn)
	ParentA* pParentA = (ParentA*)pChild;
	
	pParentB->vFunParentB();
	pParentA->vFunParentA();

	getchar();
	
}

現(xiàn)在執(zhí)行后我們的預(yù)期輸出為

vFunParentB
vFunParentA

但實(shí)際輸出:

vFunParentA
vFunParentA

當(dāng)時(shí)百思不得其“姐”,最后發(fā)現(xiàn)是自己對(duì)多重繼承下的虛表內(nèi)存結(jié)構(gòu)不夠了解。

博主另一外一篇關(guān)于虛表的:
c-15 c++虛表

在多重繼承下Child內(nèi)存結(jié)構(gòu)應(yīng)該是如下結(jié)構(gòu):

在這里插入圖片描述

由于我們使用 void * 類型強(qiáng)轉(zhuǎn)為ParentB,ParentA返回的指針地址依然是ParentA,而沒有做內(nèi)存偏移計(jì)算.如下圖所示:

在這里插入圖片描述

當(dāng)我們不適用void*強(qiáng)轉(zhuǎn)后編譯器會(huì)幫我進(jìn)行偏移計(jì)算會(huì)迫使ParentB偏移8字節(jié),從而使pParentB 指向正確的內(nèi)存虛表。

在這里插入圖片描述

在單一繼承下不會(huì)出現(xiàn)這類問題,我們最后看下本例中的內(nèi)存結(jié)構(gòu):

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

到此這篇關(guān)于關(guān)于C++ 多重繼承下虛表結(jié)構(gòu)的問題的文章就介紹到這了,更多相關(guān)C++ 多重繼承虛表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的new/delete、構(gòu)造/析構(gòu)函數(shù)、dynamic_cast分析

    C++中的new/delete、構(gòu)造/析構(gòu)函數(shù)、dynamic_cast分析

    這篇文章主要介紹了C++中的new/delete、構(gòu)造/析構(gòu)函數(shù)、dynamic_cast分析 本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 詳解C語言內(nèi)核中的鏈表與結(jié)構(gòu)體

    詳解C語言內(nèi)核中的鏈表與結(jié)構(gòu)體

    Windows內(nèi)核中是無法使用vector容器等數(shù)據(jù)結(jié)構(gòu)的,當(dāng)我們需要保存一個(gè)結(jié)構(gòu)體數(shù)組時(shí),就需要使用內(nèi)核中提供的專用鏈表結(jié)構(gòu)。本文分享了幾個(gè)內(nèi)核中使用鏈表存儲(chǔ)多個(gè)結(jié)構(gòu)體的通用案例,希望對(duì)你有所幫助
    2022-09-09
  • Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球

    Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球

    這篇文章主要為大家詳細(xì)介紹了Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言二分法求解方程根的兩種方法

    C語言二分法求解方程根的兩種方法

    這篇文章主要為大家詳細(xì)介紹了C語言二分法求解方程根的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • c++非變易算法-stl算法

    c++非變易算法-stl算法

    本文主要介紹了C++ STL算法庫中的非變易算法,是一些原則上不會(huì)變更操作數(shù)據(jù)的算法,包括:逐個(gè)查找算法、元素搜索算法、元素統(tǒng)計(jì)算法、序列匹配算法、子序列搜索算法、這些函數(shù)均包含于<algorithm>頭文件,本文給出的所有代碼在VS2010中編譯運(yùn)行通過
    2014-03-03
  • C語言遞歸思想實(shí)現(xiàn)漢諾塔詳解

    C語言遞歸思想實(shí)現(xiàn)漢諾塔詳解

    大家好,本篇文章主要講的是C語言遞歸思想實(shí)現(xiàn)漢諾塔詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 淺析C++中的虛函數(shù)

    淺析C++中的虛函數(shù)

    以下是對(duì)C++中的虛函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 淺談C++模板元編程

    淺談C++模板元編程

    本篇文章主要介紹了淺談C++模板元編程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • C++ 算法精講之貪心算法

    C++ 算法精講之貪心算法

    貪心算法(又稱貪婪算法)是指,在對(duì)問題求解時(shí),總是做出在當(dāng)前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,他所做出的僅是在某種意義上的局部最優(yōu)解
    2022-03-03
  • C語言 function recursion函數(shù)遞歸詳解

    C語言 function recursion函數(shù)遞歸詳解

    遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法,舉個(gè)例子: 從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去
    2021-10-10

最新評(píng)論