类层次中的函数调用

在类的继承层次中很多父类有相同名字的函数但是子类中没有,这时C++规定使用距本类最近的那个版本。这个规定也适用于父类的重载函数,具体点就是如果子类定义了一个与父类中该重载函数同名的函数,那么父类中的重载函数都将被覆盖。

这也是C++中的一种机制。

如果你现在就是想覆盖父类的函数,那么就应该遵守函数原型匹配的原则。不过,这除了函数返回值是类类型的引用或者指针的情况,因为一个父类的指针或者引用可以被子类的指针或者引用代替。这叫做返回值类型的协变,就是说返回值类型允许在类类型之间变换,当然这个类类型必须是有继承关系的。

所以其实重写函数有个要求就是返回值类型必须是兼容的,这个兼容包括返回值类型相同和返回值类型协变。

下面再换一个例子:

下面再来看一个例子。

由该图可知重写函数的名称必须相同,返回值类型要兼容,形参列表可以不同。

再来看重载函数的要求。

重载函数只要求函数名相同就行,所以这两者要分清楚。

但是如果你就想要在子类的重写函数中调用父类的被重写函数,你可以在子类的重写函数中显式调用父类的被重写函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容