回答
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