C++11 final关键字的使用

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;
	}
};
原文链接:,转发请注明来源!