2401_83423308 2024-06-26 11:30 采纳率: 92.3%
浏览 3
已结题

C++问题:代码错在哪了


#include<iostream>
#include<windows.h>
using namespace std;
class Animal
{
public:
    Animal(){}
    virtual void voice()=0;
};
class cat:public Animal
{
public:
    cat(){}
    void voice()
    {
        cout<<"miao~"<<endl;
    }
};
class dog:public Animal
{
public:
    dog(){}
    void voice()
    {
        cout<<"wang~"<<endl;
    }
};
int main()
{
    cat *aCat;
    dog *aDog;
    aCat->voice();
    aDog->voice();
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-26 11:30
    关注

    引自免费微信小程序:皆我百晓生

    在您的 C++ 代码中,有一个错误导致了程序运行时崩溃。您尝试通过类 Animal 的纯虚函数 void voice() 来派生出两个类:catdog。但是,在 main() 函数中,您将一个指向 cat 类的指针 aCat 赋值给变量 aCat 并调用了其成员函数 voice()。然而,由于 aCatcat 的实例,因此它并没有访问到 cat::voice() 中定义的成员函数。

    正确的做法是让 aCat 指向 cat 对象本身,而不是 cat 的类。以下是修复后的代码:

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    class Animal {
    public:
        virtual ~Animal() {}
        virtual void voice() = 0;
    };
    
    class cat : public Animal {
    public:
        cat() {}
        void voice() override {
            cout << "miao~" << endl;
        }
    };
    
    class dog : public Animal {
    public:
        dog() {}
        void voice() override {
            cout << "wang~" << endl;
        }
    };
    
    int main() {
        Animal *animalPtr;
        animalPtr = new cat(); // 使用动物对象作为指针
        animalPtr->voice();
    
        delete animalPtr; // 确保释放资源
    
        return 0;
    }
    

    这段代码首先创建了一个 Animal 对象,并重写了它的 voice() 成员函数。然后,我们使用这个新创建的对象指针 animalPtr 来调用 voice() 成员函数。最后,通过 delete 关键字释放了内存,确保不再占用系统资源。

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

报告相同问题?

问题事件

  • 系统已结题 7月4日
  • 已采纳回答 6月26日
  • 创建了问题 6月26日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)