我有一个虚函数的基类,我想在派生类中重写该函数。有什么方法可以让编译器检查我在派生类中声明的函数是否实际覆盖了基类中的函数?我想添加一些宏,或者确保我没有意外声明一个新函数,而不是覆盖旧函数。安全地覆盖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