覆盖纯虚函数时使用“覆盖”有什么意义吗?

新手上路,请多包涵

例如:

 class Base {
  virtual void my_function() = 0;
};

class Derived : Base {
  void my_function() override;
};

根据我的阅读, override 关键字用于确保我们在覆盖的函数中具有正确的签名,这似乎是它的唯一用途。

但是,在纯虚函数的情况下,如果我们在派生类(或基类,取决于人们如何看待事物)中使用了不正确的签名,编译器会抛出错误。那么,在 Derived::my_function() 声明的末尾添加 override 有什么意义吗?

原文由 R2B2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
1 个回答

但是,在纯虚函数的情况下,如果我们在 Derived 类中使用了不正确的签名,编译器会抛出错误

不,这编译:

 class Base {
  virtual void my_function() = 0;
};

class Derived : Base {
  void my_function(int);
//                 ^^^ mistake!
};

虽然这不会:

 class Base {
  virtual void my_function() = 0;
};

class Derived : Base {
  void my_function(int) override;
};

错误: void Derived::my_function(int) 标记为 override ,但不会覆盖


您所说的错误仅在实例化时发生 Derived - override 允许您更早地发现错误并使 Derived 的定义更清晰。

原文由 Vittorio Romeo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题