• 776阅读
  • 0回复

[转载]一文详解C++子类函数为什么不能重载父类函数 [复制链接]

上一主题 下一主题
离线20091001753
 

只看楼主 倒序阅读 楼主  发表于: 2024-08-13
原文链接
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++设计者这么设计的原因。


(づ ̄ 3 ̄)づ
快速回复
限100 字节
 
上一个 下一个