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 次 |
最近记录: |