#include <iostream>
using namespace std;
class Base
{
public:
    virtual void show() // 声明虚函数
    {
        cout << "Base" << endl;
    }
};
class Derived : public Base
{
public:
    void show() override // 覆盖虚函数
    {
        cout << "Derived" << endl;
    }
};
int main()
{
    Base *ptr = new Derived();
    ptr->show(); // 运行时解析 Q:为什么会输出 Derived ?
    delete ptr;
    return 0;
}
 
这里,调用ptr->show()时的具体步骤为:
-  
从
ptr所指对象的内存开始处读取vptr(虚指针)。 -  
使用
vptr(虚指针)访问虚表。 -  
在虚表中查找
show()函数对应的条目(因为Derived类覆盖了Base类的show(),所以虚表里的指针指向Derived::show())。 -  
调用该地址对应的函数(即
Derived::show())。 










