跳至正文

override和final说明符(C++11) 学习笔记

  • 技术

重写、重载和隐藏

重写(override)、重载(overload)和隐藏(overwrite)在C++完全不同的概念,先梳理一下区别:

重写

重写的意思更加接近于覆盖,在C++中是指派生类覆盖了基类的虚函数,这里的覆盖必须满足有相同的函数签名和返回类型,即重写是有相同的函数名、形参列表以及返回类型。

重载

它通常指一个类中有两个或者以上的函数,他们函数名相同,但是函数签名不同。

隐藏

隐藏的概念是指基类成员函数,无论是否是虚函数,当派生类出现同名函数时,如果派生类函数签名和基类不同,则基类的会被隐藏;如果派生类函数签名和基类相同,如果是虚函数则为重写,否则为隐藏。

如果想在子类中使用基类的函数,可以使用using关键字将其引入派生类。

override: 重写的问题

重写容易出现问题,即基类定义了虚函数,但是子类的函数名写错了,也不会有编译错误,只有运行测试时才会发现错误。

因此C++引入了一个非常实用的关键字,即override,这个关键词告诉编译器,这个函数需要覆盖基类的虚函数,一旦编译器发现虚函数不符合重写规则,就会报错。

final说明符

在C++引入了final关键词来阻止派生类继承虚函数。它告诉编译器,这个函数不能被重写,如果重写了会编译报错,跟override一样放在函数声明的尾部。

End.

标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

目录