回答
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
的情况下隐藏基类中的一个,则这是错误。
但是大多数提案被删除,只有final
和override
功能被保留,作为“具有特殊含义的标识符”而不是属性。
有很少的方法可以在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
为了使这两个警告,您可以使用下列选项之一:
- 设置警告级别在项目设置中为4,然后禁用不需要的警告。这是我最喜欢的方式。要禁用不需要的级别4警告,请转到项目设置> C/C++>高级,然后在禁用特定警告框中输入警告号码。
使用代码启用上述两个警告。
#pragma warning(default:4263) #pragma warning(default:4266)
启用上述项目设置> C/C++>命令行两次警告,然后输入/ w34263/w34266。这里/ wNxxxx选项表示在级别N中启用xxxx警告(N = 3是默认级别)。你也可以做/ wdNxxxx其禁用水平N的XXXX警告
GCC
GCC 5.1及更高版本增加了新的预警提示,覆盖,你可以传递作为命令行选项-Wsuggest-override
。
锵
锵3.5+有-Winconsistent-missing-override
然而,这只能检测情况下,如果基类使用覆盖,但家长不。你也可以看看叮当的工具。
那些VC++警告用于_including_ override,它不适用。问题是要求在_missing_覆盖中发出警告。 – mskfisher
- 1. c#覆盖关键字
- 2. 新VS覆盖关键字
- 3. 要求虚函数覆盖以使用覆盖关键字
- 4. 覆盖所有方法代替覆盖关键字
- 5. C#虚拟&覆盖关键字
- 6. SQL Server 2012关键字覆盖
- 7. GWT覆盖类型访问关键字
- 8. Rails:覆盖关联主键
- 9. 如何执行boost :: filesystem copy_file覆盖
- 10. 如何覆盖treectrl中的关键字搜索?
- 11. 如何覆盖Android键盘
- 12. 覆盖CRT的执行_purecall
- 13. 热键覆盖
- 14. Java - 覆盖列表的关键处理
- 15. 如何覆盖十字线
- 16. 执行的覆盖方法,触发未覆盖一个
- 17. 如何覆盖ActionLink行为
- 18. 如何覆盖Log4J行号
- 19. 如何覆盖我当前运行的可执行文件?
- 20. 如何从覆盖面DLIB关键点在OpenCV的窗口
- 21. 覆盖键绑定
- 22. 软键盘覆盖
- 23. Autoit IniWrite()覆盖键?
- 24. 如何覆盖默认键盘布局?
- 25. 角热键,如何覆盖梳?
- 26. 如何覆盖主页键功能
- 27. 如何覆盖键盘ondown按钮?
- 28. 如何覆盖按键在LWJGL
- 29. 如何覆盖键盘中断? (Python)
- 30. 如何覆盖默认外键?
@HansPassant:Visual C++? – Mehrdad
这个问题为什么关闭?有关C++编译器警告的问题是否有问题? (如果答案是“否”,那么这是一个完全有效的答案..) – Mehrdad
@Mehrdad:___我不认为这个问题有什么问题。如果它真的被关闭,应该重新打开。 – sbi