C++中增加了final关键字来限制某个类不能被继承,或者或个虚函数不能被重写,和java的final关键字的功能是类似的。如果使用final修饰函数,只能修饰虚函数,并且要把final关键字放到类或者函数的后面。
修饰函数
如果使用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;
}
};
修饰类
使用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;
}
};