c++中增加了final关键字来限制某个类不能被继承,或者某个虚函数不能被重写。如果使用final修饰函数,只能修饰虚函数,并且放在类或者函数的后面。
修饰函数
#include <iostream>
using namespace std;class Base
{
public:virtual void test() = 0;
};class Child : public Base
{
public:void test() final{cout << "Child class...";}
};class GrandChild : public Child
{
public:// 语法错误, 不允许重写void test(){cout << "GrandChild class...";}
};int main()
{Base* c = new Child;c->test();Base* g = new GrandChild;g->test();return 0;
}
在子类重写了这个方法,使用final
标记后,孙子类就不能重写了。
修饰类
final修饰过的类,不允许被继承,也就是说这个类不能有派生类。
#include <iostream>
using namespace std;class Base
{
public:virtual void test(){cout << "Base class...";}
};class Child final : public Base
{
public:void test(){cout << "Child class...";}
};// error, 语法错误
class GrandChild : public Child
{
public:
};int main()
{Base* c = new Child;c->test();Base* g = new GrandChild;g->test();return 0;
}