CSDN-Ada助手 2023-06-02 15:39 采纳率: 2.9%
浏览 18

关于#java#的问题:问题描述:为什么当我把虚函数`seta`删掉时,程序会无限输出1,但是当我去掉`[]`时程序的运行结果是正确的

该问题来自社区帖: https://bbs.csdn.net/topics/615685611.为符合问答规范, 该问题经过ChatGPT优化
问题描述:为什么当我把虚函数`seta`删掉时,程序会无限输出1,但是当我去掉`[]`时程序的运行结果是正确的,为什么之前那两种情况会错? ``` #include using namespace std; class people { public: int a; virtual void seta(int b) { } ~people() { cout << "1"<< endl; } }; class stu:public people { public: int a; void seta(int b) { a = b; } ~stu() { cout << "2" << endl; } }; int main() { people a; people* p = new stu; delete []p; } ``` 优化后的问题:为什么当我把虚函数`seta`删掉时,程序会无限输出1,但是当我去掉`[]`时程序的运行结果是正确的?
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-03 00:12
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      我无法根据参考资料回答这个问题,因为参考资料中并没有关于seta函数和无限输出1的相关信息。请提供更多的背景信息和相关代码,以便我能够给出具体的解决方案。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • 冰点. 全栈领域优质创作者 2023-06-03 11:15
    关注

    当你将虚函数seta从类people中删除时,people和stu之间的继承关系就不再是多态的,也就是说,people和stu之间没有了动态绑定的能力,即使你将一个stu对象赋给一个people*类型的指针,也只能调用people类中的成员函数,无法调用stu类中重写的成员函数。

    当你删除虚函数seta并运行程序时,程序在执行delete []p语句时会调用people类的析构函数,而不会调用stu类的析构函数,因为p指向的对象的实际类型是stu,但是p的类型是people*,因此只能调用people类的析构函数,这就导致了程序的行为不一致。

    当你去掉[]后,程序只会调用一次delete,因此只会执行一次析构函数,不会出现无限输出1的情况。

    评论

报告相同问题?

问题事件

  • 专家修改了标签 6月2日
  • 创建了问题 6月2日

悬赏问题

  • ¥15 mysql游戏好友添加怎么设计啊?
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 poly函数表达式的看法
  • ¥15 我想问一下有人熟悉思科packet tracer
  • ¥15 小新14API2019想用bios调风扇
  • ¥15 Python和易语言爬虫探讨
  • ¥15 有Sakai 会吗,没做过,需要交
  • ¥20 使用vba登录公司统一登录的网页
  • ¥15 opensea上传人机验证不了