R2B*_*2B2 45 c++ overriding pure-virtual c++11
例如:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function() override;
};
Run Code Online (Sandbox Code Playgroud)
从我读到的,override关键字用于确保我们在我们覆盖的函数中具有正确的签名,并且它似乎是它的唯一用途.
但是,在纯虚函数的情况下,如果我们在Derived类(或Base类中使用不正确的签名,取决于如何看待事物)中使用不正确的签名,编译器将抛出错误.那么,在声明override结束时添加是否有任何意义Derived::my_function()?
Vit*_*meo 73
但是,在纯虚函数的情况下,如果我们在Derived类中使用了错误的签名,编译器将抛出错误
不,这编译:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function(int);
// ^^^ mistake!
};
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function(int) override;
};
Run Code Online (Sandbox Code Playgroud)
错误:已
void Derived::my_function(int)标记override,但未覆盖
您正在谈论的错误仅在实例化时发生Derived- override允许您更早地捕获错误并使定义Derived更清晰/更可读.
das*_*ght 31
是的,使用override关键字作为防御性练习是个好主意.
当Base决定的作者my_function不再是纯虚拟的时候考虑重新设计,并且它应该采用新的参数.随着override到位编译器将捕获这个问题; 没有override你的Derived班级将继续编译.
是!!
它提高了代码清晰度:
override关键字可以防止歧义并传达它覆盖其基类方法的含义.
防止可能的意外使用:将来,如果基类更改方法签名(此处virtual),则强制派生类相应地更改.(编译错误).否则(没有override关键字)可以考虑method overload,这不是预期的.
| 归档时间: |
|
| 查看次数: |
6278 次 |
| 最近记录: |