相关疑难解决方法(0)

安全地覆盖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);
}
Run Code Online (Sandbox Code Playgroud)

这里parent::handle_event()调用而不是child::handle_event(),因为child的方法错过了const声明,因此声明了一个新方法.这也可能是函数名中的拼写错误或参数类型中的一些细微差别.如果基类的接口发生更改并且某些派生类未更新以反映更改,则也很容易发生.

有没有办法避免这个问题,我能以某种方式告诉编译器或其他工具为我检查这个吗?任何有用的编译器标志(最好是g ++)?你如何避免这些问题?

c++ overriding virtual-functions

98
推荐指数
6
解决办法
10万
查看次数

标签 统计

c++ ×1

overriding ×1

virtual-functions ×1