6

Is there a way in C++ to ensure that a virtual method in a subclass is in fact overriding a super class virtual method? Sometimes when I refactor, I forget a method and then wonder why it is not being called but I forgot to change the method signature so it is no longer overriding anything.

Thanks

4

2 回答 2

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";}
};

这使您可以在编译时查明您是否未能覆盖方法。在这里,我们忽略了方法const

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

};
于 2012-05-21T18:46:20.733 回答
1

这是使用关键字的 C++11 的一个特性。override

如果您使用 Visual C++ 2005 或更新版本,您也可以使用显式覆盖功能,而无需 C++11 支持。

至于跨各种编译器的实现状态,请参考Apache stdcxx 的站点

GCC 4.7.0 实现了该功能,MSVC 实现了 Visual C++ 11.0 的标准化版本(将随 Visual Studio 2012 发布)。

于 2012-05-21T18:47:19.067 回答