关于c++11提供final和override关键词巧用

final在多态和派生中有两个妙用。

1.可以使这个类无法再被别的类继承,当你确定这个类不需要再被继承时便可以这么做。如代码所示:

 class  Base final
{
};
class Override:public Base
{

};

如果这样写编译器会报错并且提示  error C3246: “Override”: 无法从“Base”继承,因为它已被声明为“final”

2.多态时,当你不想让基类的虚函数被派生类的覆盖,便可以使用final关键字,使他无法被覆盖,注意一定要是虚函数!!!!!!并且必须放在最后(如const等符号后面)

如代码所示:

 class  Base
{
public:
	virtual void f1()const final {}
};
class Override:public Base
{
public:
	void f1()const;
};

报错信息为:error C3248: “Base::f1”: 声明为“final”的函数无法被“Override::f1”重写

override 关键字它主要用于防止你在继承时想要覆盖基类某个虚函数,不小心少打一点东西导致根本无法实现多态性。这个很难排查出来,因此这个override可以帮助我们分清楚是不是覆盖掉了基类的虚函数.

如代码所示:

 class  Base
{
public:
	virtual void f1()const;
	virtual void f3()const;
	virtual void f4()const;
};
class Override:public Base
{
public:
	void f1()const override;//正确覆盖掉了基类f1函数
	void f2()override;//基类无f2,所以报错
	void f3()override;//漏打const错误
	void f4();//和基类f4重载并不是多态注意.
};


猜你喜欢

转载自blog.csdn.net/qq_41657315/article/details/80919907