实现C ++多态性?

时间:2019-03-08 14:58:45

标签: c++ polymorphism

我知道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();
}
  1. 在这种情况下,为什么b可以访问派生类的vtable?
  2. 如果派生类继承了多个基类,并且派生类重写了这些基类的虚函数,则派生类中将有多个vptr。

    Derived *d = new Derived();
    Base1 *b1 = d;
    Base2 *b2 = d;
    Base3 *b3 = d;
    

    那么这些基类指针如何在vtable中获取vptr和偏移量?

0 个答案:

没有答案