Edu*_*yan 27 c++ virtual-functions final c++11
我正在阅读一篇非常棒的C++ 11教程,作者在解释final关键字的同时提供了这个例子:
struct B {
virtual void f() const final; // do not override
virtual void g();
};
struct D : B {
void f() const; // error: D::f attempts to override final B::f
void g(); // OK
};
Run Code Online (Sandbox Code Playgroud)
那么在这里使用final关键字是否有意义?在我看来,你可以避免在virtual这里使用关键字,防止f()被覆盖.
Som*_*ude 32
如果不将函数标记为virtual,final则子类仍然可以实现该函数并隐藏基类函数.
通过使函数virtual和final子类无法覆盖或隐藏函数.
Kar*_*oll 11
是! 在您提供的示例中,final关键字可以防止任何派生类在f()您正确说出时覆盖.如果函数是非虚函数,D:f()则允许隐藏函数的基类版本:
struct B {
void f() const; // do not override
virtual void g();
};
struct D : B {
void f() const; // OK!
void g(); // OK
};
Run Code Online (Sandbox Code Playgroud)
通过使f()一个virtual和final功能,在覆盖或隐藏任何尝试会导致编译错误.
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |