一.重载
成员被重载的特征:(1)相同的范围,在同一个类中
(2)函数名字相同
(3)参数不同
(4)virtual关键字可有可无
二.隐藏
(1)如果派生类的函数与基类的函数同名,但是参数不同,此时不论有无virtual关键字,基类的函数都被隐藏
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时基类的函数被隐藏
三.覆盖
覆盖是指派生类函数覆盖基类函数,特征:(1)不同范围,分别位于派生类和基类
(2)函数名字相同
(3)参数相同
(4)基类函数必须有virtual关键字
四.区别
- 重载:重载(overload)是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型
- 隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏
- 重写:重写(override,覆盖)是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰
五.阻止
C++11之前一直没有继承控制关键字,所以C++11添加了两个继承控制关键字:final和override
1.final
final阻止类的进一步派生和虚函数的进一步重写
final关键字可以用来修饰类/变量和方法
(1) 修饰类
final修饰的类不能被继承
(2) 修饰变量
final修饰的变量不可被修改
(3) 修饰方法
final修饰的方法不能被重写,一旦获得初始值就不能被重新赋值
2.override
override确保派生类中声明的函数和基类的虚函数有相同的前面