覆盖纯虚函数时使用`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
,这不是预期的。
上一篇: Is there any point in using `override` when overriding a pure virtual function?
下一篇: Requiring virtual function overrides to use override keyword