c++虚函数以及虚继承图示
1. 一般單一繼承
只有一個虛表指針,虛表包含所有的虛函數
思考:1. 如果將GrandChild中的h_grandchild前面的virtual去掉,內存中的唯一變化是虛表缺少一項GrandChild::h_grandchild
2. ?如果是child: virtual public parent?
output:
addr:0014FA44 sizeof = 28
0:
f1783c = f110c8
GrandChild::g_child()//這個時候要注意,虛函數表里沒有f//可以這樣理解,虛函數表內的函數和非虛擬繼承是一樣的,但是基類的位置不一樣
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
虛基類肯定是放在最后,但是虛函數表中的內容就比較糾結,只放自己被重載的函數。
child和grandchild的指針地址相同,parent的指針地址在最后
2. 一般多繼承
3. 虛基類的多繼承
請參考:http://blog.csdn.net/sunmenggmail/article/details/7744608
附上本人檢測內存分布的函數:
本文中的圖片均來自:http://blog.csdn.net/haoel
總結
以上是生活随笔為你收集整理的c++虚函数以及虚继承图示的全部內容,希望文章能夠幫你解決所遇到的問題。