我的意思是,如果我我的B類擴展其它的類A(不是由我創建)裏面,你怎麼會知道的方法你正在寫:你如何檢查你是在寫一個新的方法還是覆蓋現有的方法?
void SetStatus() { }
它尚未申報和你只是覆蓋它?右鍵點擊 - >每次轉到定義? (例如VS2015)。
我的意思是,如果我我的B類擴展其它的類A(不是由我創建)裏面,你怎麼會知道的方法你正在寫:你如何檢查你是在寫一個新的方法還是覆蓋現有的方法?
void SetStatus() { }
它尚未申報和你只是覆蓋它?右鍵點擊 - >每次轉到定義? (例如VS2015)。
你可以使用override specifier(因爲C++ 11),如:
void SetStatus() override { }
你有什麼期望是獲得一個編譯錯誤。如果你得到它,意味着這個函數(即SetStatus()
這裏)沒有被聲明或者被聲明,但是簽名不匹配。然後你可以確認沒有重寫並刪除override specifier
。
我認爲「右鍵單擊 - >去定義」OP提到會更容易。 –
如果您有代碼 - 您可以在您的基類中聲明方法final
,那麼如果嘗試覆蓋虛擬方法,代碼將無法編譯。
如果您希望能夠覆蓋它,你可以嘗試調用A :: SetStatus();在B :: SetStatus()的定義中。
如果您的IDE顯示錯誤並且它不能編譯,那麼它不會在A中實現。 雖然這與「轉到定義」方法非常相似。
除了某種靜態的實證分析,我不認爲這是一個語言功能,將所有的情況下工作的。 – NathanOliver
我不是VS的用戶,但在Eclipse CDT中,如果成員函數覆蓋或隱藏基類函數,則會在編輯器的左邊空白處顯示一個指示符。 VS可能有類似的東西嗎? –
@FredLarson不,VS沒有類似的東西。 –