最近把《深度探索c++对象模型》读了几遍,收获甚大。明白了很多以前知其然却不知其所以然的姿势。比如构造函数与拷贝构造函数什么时候被编译器合成,虚函数、实例函数、类函数的区别等等。在此,我根据书本上的描述,结合VS2012的C++编译器,来验证其内容的正确性。让我们一起以指针寻址、虚函数表等理论作为依据,以汇编代码来实证,探索C++多态的实现。

#include <iostream>
using namespace std;
 
 
class Base
{
public:
    virtual void Test()
    {
        cout << "Base::Test()" << endl;
    }
};
 
class Derived : public Base
{
public:
    virtual void Test()
    {
        cout << "Derived::Test()" << endl;
    }
};
 
int main()
{
    Derived d;
    Base *b = &d;
 
    // 在这里,大家都知道输出的是Derived::Test(),因为多态。
    // 但是它到底是如何实现的呢?
    b->Test();
}

相关文章: