如何执行“覆盖”关键字?

有没有什么办法强制在Visual C ++ 2012中使用C ++ 11 override关键字?

(即如果我忘记说override ,那么我想得到一个警告/错误。)

C ++ 11几乎有你想要的。

最初, override关键字是更大的提案( N2928 )的一部分,该提案还包括强制执行其使用的能力:

 class A { virtual void f(); }; class B [[base_check]] : public A { void f(); // error! }; class C [[base_check]] : public A { void f [[override]] (); // OK }; 

base_check属性会在不使用override关键字的情况下重写一个虚函数。

还有一个hiding属性,它表示一个函数隐藏基类中的函数。 如果使用了base_check ,并且一个函数在不hiding的情况下隐藏了一个来自基类的函数,那么就是一个错误。

但是大部分build议都被放弃了,只有finaloverridefunction被保留下来,作为“具有特殊含义的标识符”而不是属性。

有很less的方法可以在VC ++中做到这一点,以及与GCC同样的方式。

VC ++

以下是VC ++中的相关警告号码:

 C4263 (level 4) 'function': member function does not override any base class virtual member function C4266 (level 4) 'function': no override available for virtual member function from base 'type'; function is hidden 

要启用这两个警告,您可以使用以下选项之一:

  1. 在项目设置中将警告级别设置为4,然后禁用不需要的警告。 这是我最喜欢的方式。 要禁用不需要的4级警告,请转至项目设置> C / C ++>高级,然后在“禁用特定警告”框中input警告号码。
  2. 使用代码启用以上两个警告。

     #pragma warning(default:4263) #pragma warning(default:4266) 
  3. 在项目设置> C / C ++>命令行中启用以上两个警告,然后input/ w34263 / w34266。 这里/ wNxxxx选项表示在N级启用xxxx警告(N = 3是默认级别)。 您还可以执行/ wdNxxxx,禁用级别为N的xxxx警告。

GCC

GCC 5.1+增加了新的警告build议覆盖,你可以通过命令行选项-Wsuggest-override

-Winconsistent-missing-override 3.5+具有-Winconsistent-missing-override但是这只能检测的情况下,如果基类使用覆盖,但父母没有。 你也许还想看一下叮当作响的工具。