xxxxxxzc1 2020-03-15 12:06 采纳率: 0%
浏览 155
已采纳

请问第二行的输出为什么调用的是iclass类中的fun函数?(iclass是bclass的派生类)

图片说明图片说明

  • 写回答

2条回答 默认 最新

  • BugM 2020-03-16 16:20
    关注

    不知道你说的那一行;
    分析一下:
    首先,对于bclass p1 = obj; 这一行调用了bclass的拷贝构造函数,由于你的代码中没有提供拷贝构造函数,所以执行编译器默认提供的拷贝构造函数,进行非静态成员的简单拷贝,此时obj有了对应的x,y分别为2,4。
    然后下一行p1.fun()调用的是bclass的fun(),因此此行输出为2*4 = 8

    bclass* p3 = &obj; 父类指针指向子类对象,发生了多态,因此p3->fun()调用了子类的fun(),输出结果为 (2 + 4 + 16 ) / 3 = 7

    最后一行应该会报错,由于派生类(子类)iclass覆盖重写了基类的fun(), 导致基类的fun的其他重载版本全部失效(隐藏), 因此应该会报错提示不存在参数为int型的fun(int)函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3