请教一下,父类虚函数如果有重载,子类必须全部重写吗?

Poopaye 2013-10-03 08:07:02
class Parent
{
public:
virtual void Method(void){}
virtual void Method(int i){}
};

class Child : public Parent
{
public:
virtual void Method(int i){}
};

int main(void)
{
Child *child = new Child();
child->Method(); //这里会报参数过少的错误
((Parent *)child)->Method(); //这样就没问题
return 0;
}


代码如上,如果Parent只有一个Method方法,Child即便不重写也不会出错
但一旦重写了那个带参数的,子类对象就找不到另一个没参数的了
请问c++是有这样的规定吗?
...全文
1100 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcmzgy 2013-10-03
  • 打赏
  • 举报
回复
如果基类声明被重载了,则应该在派生类中重新定义所有的基类版本。 如果在派生类中只重新定义一个版本,其他版本将会被隐藏,派生类对象将无法使用它们。 简而言之,重新定义函数,并不是重载。在派生类中定义函数,将不是使用相同的函数特征标覆盖基类声明,而是隐藏同名的基类方法,不管参数的特征标如何。 这些在C++Primer Plus中都有非常详细的介绍
ri_aje 2013-10-03
  • 打赏
  • 举报
回复
子类里 public 段加一句 using Parent::Method; 就可以找到了。
Defonds 2013-10-03
  • 打赏
  • 举报
回复
昨天好像看到一个同样问题的帖子
taodm 2013-10-03
  • 打赏
  • 举报
回复
这有一个非常复杂的名字搜索规则。
建议你买本C++ primer第三版 ,认真啃啃。

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧