我有一個虛函數的基類,我想在派生類中重寫該函數。有什麼方法可以讓編譯器檢查我在派生類中聲明的函數是否實際覆蓋了基類中的函數?我想添加一些宏,或者確保我沒有意外聲明一個新函數,而不是覆蓋舊函數。安全地覆蓋C++虛函數
拿這個例子:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
這裏parent::handle_event()
被調用,而不是child::handle_event()
,因爲孩子的方法忽略了const
聲明,因此宣佈了新的方法。這也可能是函數名稱中的拼寫錯誤或參數類型中的一些細微差異。如果基類的接口發生更改,並且某些派生類未更新以反映更改,那麼也很容易發生。
有沒有辦法避免這個問題,我可以通過某種方式告訴編譯器或其他工具來檢查我嗎?任何有用的編譯器標誌(最好用於g ++)?你如何避免這些問題?
大的問題,我一直在試圖找出爲什麼我的孩子上課功能沒有按,因爲現在是一個t時刻被調用! – 2014-12-16 00:52:04