日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++虚函数以及虚继承图示

發(fā)布時間:2024/9/30 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++虚函数以及虚继承图示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 一般單一繼承



只有一個虛表指針,虛表包含所有的虛函數(shù)

思考:1. 如果將GrandChild中的h_grandchild前面的virtual去掉,內(nèi)存中的唯一變化是虛表缺少一項(xiàng)GrandChild::h_grandchild

2. ?如果是child: virtual public parent?

output:

addr:0014FA44 sizeof = 28
0:
f1783c = f110c8
GrandChild::g_child()//這個時候要注意,虛函數(shù)表里沒有f//可以這樣理解,虛函數(shù)表內(nèi)的函數(shù)和非虛擬繼承是一樣的,但是基類的位置不一樣
Child::h_child()
GrandChild::h_grandchild()
1:
f1784c = fffffffc
?fffffffc
?10
2:
100
3:
1000
4:
0
5:
f17828 = f11041
GrandChild::f()
?Parent::g()
?Parent::h()
6:
10

虛基類肯定是放在最后,但是虛函數(shù)表中的內(nèi)容就比較糾結(jié),只放自己被重載的函數(shù)。

child和grandchild的指針地址相同,parent的指針地址在最后


2. 一般多繼承



3. 虛基類的多繼承


請參考:http://blog.csdn.net/sunmenggmail/article/details/7744608


附上本人檢測內(nèi)存分布的函數(shù):


typedef void (*Fun)(void);GrandChild b;int *ptr;/*B b;*/ptr = (int*)&b;cout <<"addr:" << ptr << " sizeof = " << sizeof(GrandChild) <<endl;Fun pFun = NULL;/* Fun pFun = (Fun ) ((int*)ptr[0])[0];pFun();*/cout<<"parent:"<<(Parent *)&b<<endl<<"child:"<<(Child *)&b<<endl<<"grandchild:"<<&b<<endl;for(int i=0;i<sizeof(GrandChild)/sizeof(int);i++){cout<<i<<":"<<endl;if(ptr[i] < 10000){cout << dec << ptr[i]<<endl;}else{cout << hex << ptr[i] <<" = " << hex << * ((int*)(ptr[i])) <<endl;int *p = (int*)(ptr[i]);if(*p==-4){cout<<" "<<p[0]<<endl;cout<<" "<<p[1]<<endl;}else{while(*p!=0){pFun = (Fun )(*p);//cout<<" "<<;//cout.flush();pFun();++p;}}}}

本文中的圖片均來自:http://blog.csdn.net/haoel

總結(jié)

以上是生活随笔為你收集整理的c++虚函数以及虚继承图示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。