一,禁止继承
class A final
{
};
class B : public A // 报错 cannot derive from 'final' base 'A' in derived type 'B'
{
};
类A后加final关键字后类B将无法继承
二,禁止重写虚函数
class A
{
public:
virtual void fun(); //此处使用final()关键字无意义,将失去虚函数的意义,类B将不能重写虚函数,完全可以使用非虚函数,所以final关键字一般用于派生类中
};
class B : public A
{
public:
void fun() override final;
};
class C : public B
{
public:
void fun() override; // 报错 declaration of 'fun' overrides a 'final' function
};
类B可以重写类A的虚函数,类B在fun()函数后加final关键字,类C将无法重写类B中的虚函数。