35、C++中的重载、重写(覆盖)和隐藏的区别

(1)重载(overload)

重载是指在同一范围定义中的同名成员函数才存在重载关系。主要特点是函数名相同,参数类型和数目 有所不同,不能出现参数个数和类型均相同,仅仅依靠返回值不同来区分的函数。重载和函数成员是否 是虚函数无关。举个例子:

(2)重写(覆盖)(override)

重写指的是在派生类中覆盖基类中的同名函数,重写就是重写函数体,要求基类函数必须是虚函数且:

1.与基类的虚函数有相同的参数个数

2.与基类的虚函数有相同的参数类型

3.与基类的虚函数有相同的返回值类型

重载与重写的区别:

1.重写是父类和子类之间的垂直关系,重载是不同函数之间的水平关系

2.重写要求参数列表相同,重载则要求参数列表不同,返回值不要求

3.重写关系中,调用方法根据对象类型决定,重载根据调用时实参表与形参表的对应关系来选择函数 体

(3)隐藏(hide)

隐藏指的是某些情况下,派生类中的函数屏蔽了基类中的同名函数,包括以下情况:

1.两个函数参数相同,但是基类函数不是虚函数。和重写的区别在于基类函数是否是虚函数。举个例 子:

2.两个函数参数不同,无论基类函数是不是虚函数,都会被隐藏。和重载的区别在于两个函数不在同 一个类中。举个例子:

原文地址:https://www.cnblogs.com/crbhf/p/14923522.html