C++11 引入了
final
说明符,它允许基类防止派生类中的虚函数的派生或重写。
如何对 C++11 之前的类继承和函数重写实施类似的约束?
可以使用虚拟继承和类友谊来实现。
class seal
{
friend class impl1;
friend class impl2;
seal() {} // note it's private!
};
struct interface
{
virtual ~interface() {}
};
struct impl1 : interface, virtual seal
{};
struct impl2 : interface, virtual seal
{};
struct impl3 : impl2{}; // declaration works...
int main()
{
impl1 i1;
impl2 i2;
impl3 i3; // ...but fails to compile here
}