@overrides for C++?

jma*_*erx 6 c++

在C++中是否有一种方法可以确保子类中的虚方法实际上覆盖了超类虚方法?有时当我重构时,我会忘记一个方法然后想知道为什么它没有被调用但是我忘了改变方法签名所以它不再覆盖任何东西.

谢谢

jua*_*nza 9

在C++ 11中可以使用override标识符:

struct Base {    
  virtual void foo() const { std::cout << "Base::foo!\n"; }
};

struct Derived : virtual public Base {
  virtual void foo() const override {std::cout << "Derived::foo!\n";}
};
Run Code Online (Sandbox Code Playgroud)

这允许您在编译时找出是否未能覆盖方法.在这里,我们忽略了制作方法const:

struct BadDerived : virtual public Base {
  virtual void foo() override {std::cout << "BadDerived::foo!\n";} // FAIL! Compiler finds our mistake.

};
Run Code Online (Sandbox Code Playgroud)