final
c++增加了final关键字来限制某个类不能被继承或者某个虚函数不能被重写,如果final修饰函数只能修饰虚函数,并且要把final关键字放到类或者函数的后面
修饰函数
如果是使用final修饰函数,只能修饰虚函数,这样就可以组织子类重写父类这个函数
class Base
{
public:
virtual void test()
{
cout<<"Base class...";
}
};
class Child:public Base
{
public:
void test()final
{
cout<<"Child class...";
}
};
class GrandChild:public Child
{
public:
//语法错误,不允许重写
void test()
{
cout<<"GrandChild class...";
}
};
修饰类
使用final关键字修饰过的类不允许被继承,也就是说这个类不能有子类
class Child final:public Base
{
public:
void test()
{
cout<<"Child class...";
}
};
//语法错误
class GrandChild:public Child
{
public:
};
override
override关键字明确的表明将会重写父类的虚函数,和final的用法相同,放在函数后面。提高了程序的正确性,降低了出错概率.
class Base
{
public:
virtual void test()
{
cout<<"Base class...";
}
};
class Child:pubic Base
{
public:
//正确,重写了父类的虚寒是
void test() override
{
cout<<"Child class...";
}
};
class GrandChild:public Child
{
public:
//报错,父类中没有相同的虚函数可以被重写
void test(int a) override
{
cout<<"Child class...";
}
};