第十三周【任务二】Animal设计为抽象类,每一个Animal的派生类都有一个“名字”数据成员

本博客介绍了如何将C++中的Animal类设计为抽象类,使其不能被实例化,并为每个Animal的派生类添加一个名为'名字'的数据成员。任务包括修改Animal类以包含纯虚函数,删除无法实例化的代码,并在各个派生类中利用'名字'数据成员。示例代码展示了如何实现这些改动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【任务2】下面给出了基类Animal和main()函数。
(任务2.1)根据main()函数给出的注释提示,设计出相关的各个类。
(任务2.2)显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。
(任务2.3)每一个Animal的派生类都有一个“名字”数据成员,改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。
#include "iostream"
#include<string>
using namespace std;
class Animal
{
public:
 virtual void cry() {cout<<"不知哪种动物,让我如何学叫?"<<endl;}
};

int main( )
{
 Animal *p;
 p = new Animal(); p->cry(); //输出: 不知哪种动物,让我如何学叫?(问题出自此处)
 Mouse m("Jerry"); p=&m; p->cry(); //输出: 我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!
 Cat c("Tom");  p=&c; p->cry(); //输出: 我叫Tom,是一只猫,我的叫声是:喵喵喵!
 Dog d("Droopy");  p=&d; p->cry(); //输出: 我叫Droopy,是一条狗,我的叫声是:汪汪汪!
 Giraffe g("Gill");  p=&g; p->cry(); //输出: 我叫Gill,是长颈鹿,脖子太长,发不出声音来!
 system("pause");
 return 0;
}

 

1.声明一个动物基Animal,私有整型成员变量年龄age,请定义一个派生类Dog,在其成员函数SetAge(int n)中直接给age赋值,测试下看是否会出问题?如何解决? 2.设计一个单基继承的层次程序,用Person派生出Student,增加属性学号index和年级level。Person中至少有姓名name、年龄age等数据成员,以及构造函数、输出函数等,其余成员函数根据需要添加。在主函数中进行测试。 3.定义一个学生Student和教师Teacher,学生有姓名name、学号index等数据成员,教师有姓名name、工作证号workID、职称title、课程course、学时hoursPerWeek等数据成员。再定义一个助教TeachingAssistant,多继承于学生和教师,该可以使用学生的全部数据成员,以及教师的课程和学时数据成员。要求:每个提供自定义的构造函数和析构函数,并通过同名函数ShowInfo来显示全部数据成员的值。在主函数中进行测试。 4.声明一个Person,包含姓名name和年龄age等私有数据成员以及相关的成员函数;由它派生出领导Leader,包含职务position和部门department私有数据成员以及相关的成员函数;再由Person派生出工程师Engineer,包含职务position和专业speciality私有数据成员以及相关的成员函数;再由Leader和Engineer派生出主任工程师Chairman。在主函数中测试各对象初始化和信息输出,查看是否会出问题?如何解决?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值