我知道C ++多态性的实现是基于vtable和vptr的。但是现在我不明白基类的指针如何获取派生类的vptr。 例如:
class Base {
int b;
public:
virtual void f() {}
virtual void g() {}
};
class Derived: public Base {
int d;
public:
virtual void g() {}
};
int main() {
Base *b = new Derived();
b->g();
}
如果派生类继承了多个基类,并且派生类重写了这些基类的虚函数,则派生类中将有多个vptr。
Derived *d = new Derived();
Base1 *b1 = d;
Base2 *b2 = d;
Base3 *b3 = d;
那么这些基类指针如何在vtable中获取vptr和偏移量?