2016-07-29 38 views
4

我的意思是,如果我我的B類擴展其它的類A(不是由我創建)裏面,你怎麼會知道的方法你正在寫:你如何檢查你是在寫一個新的方法還是覆蓋現有的方法?

void SetStatus() { } 

它尚未申報和你只是覆蓋它?右鍵點擊 - >每次轉到定義? (例如VS2015)。

+0

除了某種靜態的實證分析,我不認爲這是一個語言功能,將所有的情況下工作的。 – NathanOliver

+0

我不是VS的用戶,但在Eclipse CDT中,如果成員函數覆蓋或隱藏基類函數,則會在編輯器的左邊空白處顯示一個指示符。 VS可能有類似的東西嗎? –

+1

@FredLarson不,VS沒有類似的東西。 –

回答

0

你可以使用override specifier(因爲C++ 11),如:

void SetStatus() override { } 

你有什麼期望是獲得一個編譯錯誤。如果你得到它,意味着這個函數(即SetStatus()這裏)沒有被聲明或者被聲明,但是簽名不匹配。然後你可以確認沒有重寫並刪除override specifier

+0

我認爲「右鍵單擊 - >去定義」OP提到會更容易。 –

1

如果您有代碼 - 您可以在您的基類中聲明方法final,那麼如果嘗試覆蓋虛擬方法,代碼將無法編譯。

如果您希望能夠覆蓋它,你可以嘗試調用A :: SetStatus();在B :: SetStatus()的定義中。

如果您的IDE顯示錯誤並且它不能編譯,那麼它不會在A中實現。 雖然這與「轉到定義」方法非常相似。

相關問題