我是否还需要在子类方法上指定虚拟?

ere*_*eOn 26 c++ inheritance virtual-destructor

之前可能已经问过这个问题,但是我无法找到类似的问题.

考虑以下类层次结构:

class BritneySpears
{
  public:

    virtual ~BritneySpears();
};

class Daughter1 : public BritneySpears
{
  public:

    virtual ~Daughter1(); // Virtual specifier
};

class Daughter2 : public BritneySpears
{
  public:

    ~Daughter2(); // No virtual specifier
};
Run Code Online (Sandbox Code Playgroud)

Daughter1Daughter2班级有区别吗?

指定/不指定virtual子类析构函数/方法会产生什么后果?

谢谢.

Jar*_*Par 33

不,你在技术上不需要指定virtual.如果基本方法是虚拟的,那么C++将自动生成匹配的覆盖方法virtual.

但是你应该标记它们virtual.virtual毕竟,该方法使得您的代码更清晰,更容易被其他开发人员遵循.


JRL*_*JRL 8

您不需要它,但标记它可能会使您的代码更清晰.

注意:如果您的基类具有虚拟析构函数,那么您的析构函数将自动为虚拟.出于其他原因,您可能需要一个显式的析构函数,但不需要重新声明析构函数只是为了确保它是虚拟的.无论您是使用virtual关键字声明它,使用virtual关键字声明它,还是根本不声明它,它仍然是虚拟的.


Mar*_*k B 7

无论您是否在子类中指定虚拟,都会自动在派生的方法覆盖中选择虚拟.

主要结果是,如果没有在子节点中指定virtual,则很难从子类定义中看到该方法实际上是虚拟的.出于这个原因,我总是在父类和子类中指定virtual.