原文链接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++设计者这么设计的原因。