C++11 (四) - override、final


一、C++ 继承的控制

在 C++11 之前,一直没有控制继承的关键字。想要禁止一个类派生很麻烦,想要禁止派生类中重载某个虚函数也很麻烦。因此 C++ 11 添加了两个控制继承的关键字:

  • final 禁止类继承、禁止虚函数重载
  • override 显式声明为重载虚函数

二、final

1. 禁止类继承

class B {/*..*/} final; 
class D: public B {

};  //compilation error: base class TaskManager is final

2. 禁止虚函数重载

class A
{
pulic:
	virtual void func() final;
};

class B: public A
{
pulic:
	void func() const; // error, A::func is final
};

三、override

关于派生类重载基类的虚函数,有两个常见问题:

  • 无意中重载
    本意想在派生类中新增一个函数,结果声明了一个与基类的某个虚函数具有相同名字和参数的函数,无意中实现了基类虚函数的重载

  • 无意中新增函数
    本意想在派生类中重载基类虚函数,结果由于参数不小心写的不一样导致变成了声明一个新函数,并没有实现基类虚函数的重载
    这种情况不是所有的编译器都会给个警告或错误,override 关键字明确地表示此函数是对基类中一个虚函数的重载,编译器会检查该派生类函数在基类虚函数中是否能找到匹配的,如果不能则编译器报错误信息

class B
{
public:
	virtual void func(int);
};

class D : public B
{
public:
	void func(double) override; // compilation error
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值