vtable が実際にどのように構築されているかを調べることにしたので、デバッガーを開いて奇妙なことを発見しました。ノードptrにはいくつかの vptr が含まれています。私は常に、オブジェクトごとに 1 つの 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();
}