为什么要将 final 添加到 final class 的成员函数中?
Why adding final to a member function of a final class?
考虑以下代码:
#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()
在 class 中被 覆盖 =] 来自 D
.
- 将
final
添加到 class D
可以防止它进一步 派生 。
因此,成员函数 f()
不可能被派生自 D
的 class 覆盖,因为这样的派生 class 不可能存在由于 final
应用于 class D
.
使用 final
作为声明为 final
的 class 成员函数的 virtual
的覆盖控制是否有任何意义?还是只是多余的?
final
在 final
派生的 class 中的 virtual
函数是多余的。
就像在标记为 override
的方法上说 virtual
一样是多余的。 C++ 有时就是这样。
考虑以下代码:
#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()
在 class 中被 覆盖 =] 来自D
. - 将
final
添加到 classD
可以防止它进一步 派生 。
因此,成员函数 f()
不可能被派生自 D
的 class 覆盖,因为这样的派生 class 不可能存在由于 final
应用于 class D
.
使用 final
作为声明为 final
的 class 成员函数的 virtual
的覆盖控制是否有任何意义?还是只是多余的?
final
在 final
派生的 class 中的 virtual
函数是多余的。
就像在标记为 override
的方法上说 virtual
一样是多余的。 C++ 有时就是这样。