最近把《深度探索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();
}