为什么子类调用重载方法会报错

MichaelGLX 2024-02-29 10:33:27

我认为这样写非常符合编程逻辑,编译器不支持。

...全文
257 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maguangzhi 03-15
  • 打赏
  • 举报
回复

自递归调用B::Show()了,但是注意B::Show()是无参的,所以报错。参见《C++程序设计实践教程(新国标微课版)》,为避免自递归,可采用A::Show( )调用,或者((A*)this)->Show()调用,或者((A&)*this).Show()调用,这些调用编译成机器指令的结果都是一样的。

  • 打赏
  • 举报
回复 1

可以在B类中重新导出show,只要在B的声明中加上一句:
using A::show;
即可~

  • 打赏
  • 举报
回复

类需要通过作用域运算符::调用父类的Show函数。

void Show() override{
    cout << "B" << endl;
    A::Show("1");
}

MichaelGLX 02-29
  • 举报
回复
@太空漫步11 加A:: 我知道可以,但是如果在A 类里加个 void Test() 方法,B类不需要加“A::”也能访问 Test() ,和show方法 的区别 在哪?为什么重载后 子类不能直接使用 。
  • 举报
回复 1
@MichaelGLX 子类实现了show()方法就隐藏了所有父类的show方法,不管参数的隐藏。。。这是C++的规则之一,语法就这么定的,并没有为什么
  • 举报
回复
@MichaelGLX 因为A中Show是虚函数,子类B实现父类的虚函数之后,父类中show(string str)就被隐藏掉了。而且子类show中调用的并不是父类的Show,而是子类的Show。
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/8067069, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态

64,311

社区成员

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

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