我应该在基类中声明所有虚函数吗?

exc*_*ray 9 c++

当我声明一个基类时,我应该将其中的所有函数声明为虚拟,还是应该有一组虚函数和一组非虚函数,我相信这些函数不会被继承?

Ric*_*den 8

如果派生类将以不同的方式实现该函数,则函数只需要是虚拟的.

例如:

class Base {
public:
  void setI (int i)  // No need for it to be virtual
  {
    m_i = i;
  }

  virtual ~Base () {}         // Almost always a good idea

  virtual bool isDerived1 ()  // Is overridden - so make it virtual
  {
    return false;
  }

private:
  int m_i;
};

class Derived1 : public Base {
public:
  virtual ~Derived () {}

  virtual bool isDerived1 ()  // Is overridden - so make it virtual
  {
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

因此,除非您提前知道您打算覆盖它或直到您发现需要该行为,否则我会错误地认为没有任何虚拟内容.唯一的例外是析构函数,对于它来说,它几乎总是希望它在基类中是虚拟的.

  • 当一个类中至少有一个方法是虚拟的时,你应该有虚拟析构函数。 (2认同)