我有一个带有虚函数的基类,并且我想在派生类中重写该函数。有什么方法可以使编译器检查我在派生类中声明的函数是否实际上覆盖了基类中的函数?我想添加一些宏或一些确保我不会意外声明新函数的东西,而不是覆盖旧函数。
举个例子:
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 ++)?您如何避免这些问题?