深度探索C++ 对象模型(3)-默认构造函数Default Constructor续
生活随笔
收集整理的這篇文章主要介紹了
深度探索C++ 对象模型(3)-默认构造函数Default Constructor续
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)帶有虛函數的類
class Widget { public: virtual int flip() = 0;//..}; void flip(const Widget* widget ) { widget->flip(); } //假設Bell和Whistle都派生自Widget void main() { Bell bell; Whistle w; flip(bell); flip(w); }編譯器的工作為:
1).生成一個虛函數表vtbl,內含存虛函數的地址
2).為該類生成一個指針成員bptr,該指針指向vtbl虛表的地址。
Widget.flip()編譯為*widget.vptr1//以實現多態
Question: 1是索引, 為什么是1?
(2)帶有一個虛基類的類
class X{public:int i;};class A: virtual public X{};class B: virtual public X{};class C: public A, public B{};void foo(A* pa){pa->i = 1024; //無法在編譯期間確定x的位置}void test(){foo(new A());foo(new C());}編譯器的工作為:
void foo(const A* pa) {pa->__vbcX->i = 1024;/ }__vbcX用來指定基類的哪個X
【引用】
[1]<<深度探索C++ 對象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 譯
[2] 代碼地址 https://github.com/thefistlei/cplusStudy.git
總結
以上是生活随笔為你收集整理的深度探索C++ 对象模型(3)-默认构造函数Default Constructor续的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度探索C++ 对象模型(3)-默认构造
- 下一篇: 深度探索C++ 对象模型(4)-Defa