在类的继承层次中很多父类有相同名字的函数但是子类中没有,这时C++规定使用距本类最近的那个版本。这个规定也适用于父类的重载函数,具体点就是如果子类定义了一个与父类中该重载函数同名的函数,那么父类中的重载函数都将被覆盖。
这也是C++中的一种机制。
如果你现在就是想覆盖父类的函数,那么就应该遵守函数原型匹配的原则。不过,这除了函数返回值是类类型的引用或者指针的情况,因为一个父类的指针或者引用可以被子类的指针或者引用代替。这叫做返回值类型的协变,就是说返回值类型允许在类类型之间变换,当然这个类类型必须是有继承关系的。
所以其实重写函数有个要求就是返回值类型必须是兼容的,这个兼容包括返回值类型相同和返回值类型协变。
下面再换一个例子:
下面再来看一个例子。
由该图可知重写函数的名称必须相同,返回值类型要兼容,形参列表可以不同。
再来看重载函数的要求。
重载函数只要求函数名相同就行,所以这两者要分清楚。
但是如果你就想要在子类的重写函数中调用父类的被重写函数,你可以在子类的重写函数中显式调用父类的被重写函数。