override

override关键字在C++11中引入,用于明确指定派生类的函数是重写基类的虚函数。如果函数签名不匹配,编译器将报错,帮助开发者避免意外的重载。使用override可以提高代码的清晰性和编译时的错误检查。
摘要由CSDN通过智能技术生成

作用

如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。
override明确表示该函数是对基类中的一个虚函数的重写。

重写虚函数时,容易犯的错误

class Base
{
public:
	virtual void fun1() const;
	virtual void fun2(int x);
	virtual void fun3() &;
	void fun4() const;    // is not declared virtual in Base

};

class Derived : public Base
{
public:
	// 缺少const
	virtual void fun1();  
	
	// 参数时uint,与基类不一致
	virtual void fun2(unsigned int x);  
	
	// 右值引用,基类是左值引用
	virtual void fun3() &&;   
	
	void fun4() const;   
	
};

在这段代码中,子类本意是想重写父类的函数,但是参数、限定符等与父类不一致,导致“重写”成了“重载”,代码编译正确,但不符合作者本意。面对这种情况,override就派上用场了。

在派生类中,重写继承自基类成员函数的实现时,要满足记打条件:

基类中,成员函数被声明为virtual。
基类和派生类中,成员函数的返回类型和异常规格必须兼容。
基类和派生类中,成员函数名、形参类型、常量属性和引用限定符必须完全相同。

因为有如此多的限定条件导致虚函数重写如上面代码,很容易不小心出错。
C++11中的override关键字,可以显示的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。

class Base
{
public:
	virtual void fun1() const;
	virtual void fun2(int x);
	virtual void fun3()&;
	void fun4() const;    // is not declared virtual in Base

};

class Derived : public Base
{
public:
	void fun1() override {};
	void fun2(unsigned int x) override {};
	void fun3() && override {};
	void fun4() const {};
};

在这里插入图片描述
如上代码,加上override限定符后,若不满足重写条件,编译器即会报错。

如果是重写基类成员函数,最好都加上override限定符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值