C++03:论类的重载/隐藏/覆盖/阻止

一.重载

成员被重载的特征:(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确保派生类中声明的函数和基类的虚函数有相同的前面

猜你喜欢

转载自www.cnblogs.com/k5bg/p/11125835.html