C++中增加了final关键字来限制某个类不能被继承,或者或个虚函数不能被重写,和java的final关键字的功能是类似的。如果使用final修饰函数,只能修饰虚函数,并且要把final关键字放到类或者函数的后面。
1.如果使用final修饰函数,只能修饰虚函数,这样就能阻止子类重写父类的这个函数了。
代码如下:
#include <iostream>
using namespace std;class Base
{
public:virtual void test(){cout << "Base class..." << endl;}
};class Child :public Base
{
public:void test() final{cout << "Child class..." << endl;}
};class GrandChild :public Child
{
public:void test()/*error 因为Child的test()被final修饰,所以它的子类已经不能重写这个函数了。*/{cout << "GrandChild class..." << endl;}
};
2.使用final关键字修饰过的类是不允许被继承的,也就是说这个类不能有派生类。
代码如下:
#include <iostream>
using namespace std;class Base
{
public:virtual void test(){cout << "Base class..." << endl;}
};class Child final:public Base
{
public:void test() {cout << "Child class..." << endl;}
};class GrandChild :public Child//error 不能将final类型的类作基类
{
public:void test(){cout << "GrandChild class..." << endl;}
};