覆盖C++中的方法

Meh*_*dad 4 c++ overriding visual-c++

当我覆盖一个方法时,有时我不小心忘记在C++中调用超类的方法.

有没有办法帮助弄清楚我什么时候覆盖一个方法,这样我就不会忘记调用超类的方法了?(像Java一样@Override,除了C++没有注释......)

Fre*_*son 5

一个建议是非虚拟的Inferface Idiom.即,使您的公共方法非虚拟,并让它们调用派生类可以覆盖的私有或受保护的虚方法,以实现其特定的行为.

如果您无法控制基类,则可以使用中间类:

class Foo // Don't control this one
{
  public:
    virtual void action();
};

class Bar : public Foo // Intermediate base class
{
  public:
    virtual void action()
    {
       doAction();
       Foo::action();
    }

  protected:
    virtual void doAction() = 0;
};
Run Code Online (Sandbox Code Playgroud)

从中派生类Bar并覆盖doAction()每个类.你甚至可以doBeforeAction()doAfterAction()如果需要的话.