返回信息流CChild:fun() 里的 fun(1)调用的是自己的fun(double),为什么是这样?或者是什么原因让下面的程序执行错误了?
#include <cstdio>
class CParent
{
public:
virtual void fun(int v)
{
printf("Parent %d\n", v);
}
};
class CChild: public CParent
{
public:
virtual void fun(double v)
{
fun(1);
printf("Child %d\n", v);
}
};
int main()
{
CChild c;
c.fun(1);
}
这是一条镜像帖。来源:北邮人论坛 / soft-design / #32898同步于 2009/3/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
重载的问题
Jarod
2009/3/7镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
顶。。。
【 在 Jarod (学五608鬼魂) 的大作中提到: 】
: CChild:fun() 里的 fun(1)调用的是自己的fun(double),为什么是这样?或者是什么原因让下面的程序执行错误了?
: #include <cstdio>
: class CParent
: ...................
【 在 Jarod 的大作中提到: 】
: CChild:fun() 里的 fun(1)调用的是自己的fun(double),为什么是这样?或者是什么原因让下面的程序执行错误了?
: #include <cstdio>
: class CParent
: ...................
好吧,C++的重载(overload)只在同一个类里有效,在类与类之间不存在重载。实际上这里的行为是隐藏(Hide),即派生类的fun隐藏了基类的fun,你可以用平时的多态来试试看。所以当然那么就........出门左转CPP版
。。。参数类型不一样,也可以hide?
PS:我不转cpp
【 在 AFX 的大作中提到: 】
: 好吧,C++的重载(overload)只在同一个类里有效,在类与类之间不存在重载。实际上这里的行为是隐藏(Hide),即派生类的fun隐藏了基类的fun,你可以用平时的多态来试试看。所以当然那么就........出门左转CPP版
【 在 Jarod 的大作中提到: 】
: 。。。参数类型不一样,也可以hide?
: PS:我不转cpp
注意注意,如果你的背景是Java或者C#的话,这点就是很不一样的地方,C++ 是 hide by name(按函数名隐藏)的,而Java好象是hide by signature(按函数签名隐藏)的。
当然C++是在同名的情况下,优先考虑是否override,然后才是hide。反正基类和派生类之间的同名函数不存在overload,如果也不构成override,那必然就是hide了
【 在 Jarod 的大作中提到: 】
: 入群吧~~~
谢谢谢谢(作热泪盈眶状)
一在软开领域我顶多只能算是个新手,理论思虑得深而实践来得浅,和板上的众大牛比起,我就素那纯忽悠的。
二估计以后可能再也不折腾这些玩意了,算是最后再把玩把玩吧,呵呵。
再不折腾。。。。。。啥意思
【 在 AFX 的大作中提到: 】
: 谢谢谢谢(作热泪盈眶状)
: 一在软开领域我顶多只能算是个新手,理论思虑得深而实践来得浅,和板上的众大牛比起,我就素那纯忽悠的。
: 二估计以后可能再也不折腾这些玩意了,算是最后再把玩把玩吧,呵呵。
靠。。这你都不懂。。人家都不当民工了。。
【 在 Jarod (学五608鬼魂) 的大作中提到: 】
再不折腾。。。。。。啥意思
【 在 AFX 的大作中提到: 】
: 谢谢谢谢(作热泪盈眶状)
: 一在软开领域我顶多只能算是个新手,理论思虑得深而实践来得浅,和板上的众大牛比起,我就素那纯忽悠的。
: 二估计以后可能再也不折腾这些玩意了,算是最后再把玩把玩吧,呵呵。
不当民工,还可以当很多嘛...................谁知道是哪一种呢
【 在 winton 的大作中提到: 】
: 靠。。这你都不懂。。人家都不当民工了。。
: 再不折腾。。。。。。啥意思