覆盖纯虚函数时使用`override'有什么意义吗?

例如:

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

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

从我读到的内容来看, override关键字用于确保我们在覆盖的函数中拥有正确的签名,并且它似乎是它的唯一用途。

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


但是,在纯虚函数的情况下,如果我们在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更清晰/更具可读性的定义。


是的,使用override关键词作为防御性练习是一个好主意。

Base的作者决定my_function不再是一个纯虚拟的时候考虑重新设计,并且它应该带一个新的参数。 编译器会override这个问题; 没有override你的Derived类将继续编译。


是的!

它提高了代码的清晰度override关键字可以防止歧义,并传达它覆盖其基类方法的含义。

防止可能的非预期用法 :将来,如果基类更改方法签名(这里是virtual ),它强制派生类相应地改变。 (带有编译器错误)。 否则(不带override关键字)可能会被视为method overload ,这不是预期的。

链接地址: http://www.djcxy.com/p/89623.html

上一篇: Is there any point in using `override` when overriding a pure virtual function?

下一篇: Requiring virtual function overrides to use override keyword