考虑以下代码:
#include <iostream>
class B {
virtual void f() {
std::cout << "Base" << '\n';
}
};
class D final: public Base {
void f() final override {
std::cout << "Derived" << '\n';
}
};
注意上面的final
上下文关键字的两种用法-自C ++ 11起可用-我们可以观察到以下内容:
final
的成员函数D
中添加f()
可以防止f()
在D
派生的类中被覆盖 。final
添加到类D
可以防止其进一步派生。 因此,成员函数f()
不可能被D
派生的类覆盖,因为由于final
被应用于类D
。
使用final
作为声明为virtual
的类的final
成员函数的覆盖控件是否有意义?还是仅仅是多余的?
答案 0 :(得分:2)
final
中的virtual
函数上的 final
是多余的。
就像在标记为virtual
的方法上说override
是多余的。 C ++有时就是这种方式。