父类的虚函数或纯虚函数在子类中依然是虚函数。有时我们并不希望父类的某个函数在子类中被重写,在 C++11 及以后可以用关键字 final 来避免该函数再次被重写。
例:
#include
usingnamespace std;
classBase
{
public:
virtualvoid func()
{
cout<<"This is Base"<<endl;
}
};
class_Base:publicBase
{
public:
void func()final//正确,func在Base中是虚函数
{
cout<<"This is _Base"<<endl;
}
};
class __Base:public_Base
{
/* public://不正确,func在_Base中已经不再是虚函数,不能再被重写
void func()
{
cout<<"This is __Base"<
}*/
};
int main()
{
_Base a;
__Base b;
Base* ptr=&a;
ptr->func();
ptr=&b;
_Base* ptr2=&b; ptr->func();
ptr2->func();
}
以上程序运行结果:
Thisis_Base
Thisis_Base
Thisis_Base
如果不希望一个类被继承,也可以使用 final 关键字。
格式如下:
classClass_namefinal
{
...
};
则该类将不能被继承。