我决定弄清楚 vtable 是如何构建的。所以我打开调试器并发现了一些奇怪的东西。节点ptr包含一些 vptr。我一直认为每个对象只有一个 vptr。有人可以向我解释这里发生了什么吗?(我的意思是当基类指针指向派生类的对象时)
#include <iostream>
using namespace std;
class Base
{
int base;
public:
virtual void say()
{
cout << "Hello" << endl;
}
virtual void no()
{
cout << "No" << endl;
}
};
class Base2
{
public:
virtual void lol()
{
cout << "lol" << endl;
}
};
class Derv:public Base,public Base2
{
public:
void say()
{
cout << "yep" << endl;
}
};
int main()
{
Base* ptr = new Derv();
ptr->say();
ptr = new Base();
ptr->say();
}