有两个类,第二个类将继承第一个类。基类具有虚函数,并且在派生中没有虚函数。在class child的虚函数表中可以找到什么。它是空的还是根本没有创建?
class base
{
private:
int m_d;
public:
virtual void foo();
virtual void bar();
};
class derived : public base
{
int m_b;
void baz();
};
答案 0 :(得分:3)
vtable是C ++编译器的实现细节,因此没有标准答案。关于最小化每个vtable包含其所有基础的完整虚函数集的间接性是有意义的,但同样,这是一个实现细节。
答案 1 :(得分:1)
典型的解决方案是每个类都有一个vtable,因此派生类将具有与基类的vtable相同的单独vtable。这样做是为了能够通过获得vpointer值来找到它所在的类(就像在执行dynamic_cast
时那样)。