具有虚方法的父类的结果是什么,但派生类没有虚方法?

时间:2015-08-24 02:36:53

标签: c++ inheritance coding-style

注意:我不是在问为什么父类需要虚拟方法。

我记得那样的编码指南(我不记得很好,只是试着表达我自己的话,希望我有正确的措辞):如果父类有虚方法,派生类也应该在至少有一个虚方法,即使派生类本身也没有派生类,如果派生类真的不需要任何虚方法,则将析构函数设置为虚拟。背后的原因是"防止重复的虚拟表",它在说什么?

我还记得一个相关的例子:

class A{
    virtual f();
};

class B : public A{
};

B没有派生类,如果B没有虚拟方法,结果就像"任何包含B的地方都会有一个由编译器生成的重复虚拟表" (也只是从我的印象中表达出来),那是什么意思(如果是真的)?

1 个答案:

答案 0 :(得分:1)

请注意以下事项:

  • 如果基类具有析构函数以外的虚拟成员函数,则派生类将继承该函数。
  • 如果基类将成员函数声明为virtual,并且派生类声明具有相同参数类型的同名成员函数,则派生类函数将自动为虚拟,并覆盖基类的函数。
  • 如果基类具有虚拟析构函数,则派生类的析构函数将自动为虚拟,无论是否为用户声明,并覆盖基类的析构函数。

您提供的示例不存在任何问题。我会建议你忘记你认为你记得的关于这个编码标准的一切。