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;
}