标题:一文详解C++子类函数为什么不能重载父类函数
作者:20091001753
日期:2024-08-13 12:32
内容:
原文链接
https://www.jb51.net/article/262262.htm
先说结论
子类成员函数的函数名和基类一样,但是函数声明与基类不一样的时候,不会和基类函数构成重载,而是会隐藏基类函数
基本概念
重写(override):基类函数带virtual,子类函数声明和基类完全一样,实现不一样。
重载(overload):同一个类中,函数名一样,函数参数类型,个数,顺序等不一样的构成重载。
隐藏(hide):子类函数名和基类一样,但是函数声明与基类不一样,就会对基类的函数进行隐藏。
那么,子类函数名和基类一样,但是函数声明与基类不一样的时候,为什么不能重载基类函数呢?
如果重载可以发生在子类和基类之间,函数调用d.foo(a)的最佳匹配应该是Base::foo(float a)
而实际输出是:Derived::foo(float)
如果实现了跨类重载,那么d.foo(a)将也会调用到基类的函数,尽管float可以转型到float, 将很容易引起混淆。
顺应用户意图和避免不必要的混淆,这可能就是C++设计者这么设计的原因。