#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;
}
C++问题:代码错在哪了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在您的 C++ 代码中,有一个错误导致了程序运行时崩溃。您尝试通过类
Animal
的纯虚函数void voice()
来派生出两个类:cat
和dog
。但是,在main()
函数中,您将一个指向cat
类的指针aCat
赋值给变量aCat
并调用了其成员函数voice()
。然而,由于aCat
是cat
的实例,因此它并没有访问到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
关键字释放了内存,确保不再占用系统资源。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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语言)