实现所有虚拟方法,但仅更改其中一些方法

时间:2018-08-09 12:53:31

标签: c++

我想在Derived中声明所有Base虚拟函数,以供将来参考。我不介意默认的基本行为,但稍后可能会在“派生”中自定义其中的一些行为。最好的方法是什么?到目前为止,我正在这样做:

class Base {
  virtual void fun1(){ /*default behavior*/ };
  virtual void fun2(){ /*default behavior*/ };
  virtual void fun3(){ /*default behavior*/ };
  //more methods here
}

class Derived : public Base {
  virtual void fun1() override { Base::fun1(); /* may be customized later */ };
  virtual void fun2() override { /*specific implementation for derived here*/ };
  virtual void fun3() override { Base::fun3(); /* may be customized later */ };
  //rest of the base virtuals here
}

是好的做法还是省略不变的方法更好?

1 个答案:

答案 0 :(得分:0)

最好省略不变的方法。当方法的行为不变时,使用override关键字绝对不是一个好习惯。

如果您要明确告诉用户该函数实际上确实存在于基类中并且可以对其进行修改,但我暂时不打算对其进行更改,则建议使用注释。


正如另一个用户建议的那样,您可以有一个继承链,其中每个继承级别都将覆盖基类中的更多方法。这将是一个明确的方法。像这样:

class Base { /* ... */ };

class Derived1 : public Base { /* override a method from Base */ };

class Derived2 : public Derived1 {/* override a different method from Base */ };