vtbl 什么时候被改写
生活随笔
收集整理的這篇文章主要介紹了
vtbl 什么时候被改写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當父類有虛汗數, 子類繼承; 定義子類對象, 可以清楚的看到vtbl中的vptl是在子類構造函數調用之前被改寫的.
?
winxp + vs.net2005
?
代碼如下:
class A { public:A(){print();}virtual void print(){cout <<"in A" << endl;} }; class B: public A {public:B(){print();}virtual void print(){cout <<"in B" << endl;} };int _tmain(int argc, _TCHAR* argv[]) {A aaa;cout <<"seprator=============================="<<endl;B bbb; }
?
輸出為:
in A seprator============================== in A in B
?
解釋一下輸出。
頭2行很直觀。
第3行是調用基類構造函數構造幾類子對象, 第4行時調用B本身的構造函數繼續初始化對象。
那么, vptr的修改必定是在兩個構造函數調用之間被修改的 :)
總結
以上是生活随笔為你收集整理的vtbl 什么时候被改写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建堆的算法实现
- 下一篇: 调用bash shell脚本的方式