已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
应用数学 学院 信息与计算科学(信息计算) 专业 1 班、学号3111008106姓名 吴伟栓 教师评定_实验题目 继承与派生 一、 实验目的与任务实验目的:(1)学习声明和使用类的继承关系,声明派生类。(2)熟悉不同继承方式下对基类成员的访问控制。(3)学习利用虚基类解决二义性问题。实验任务:(1)声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。(2)声明一个基类BaseClass,有整形成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。(3)声明一个车(vehicle)基类,具有MaxSpeed,Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motocycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。()(选做)从实验六中的people(人员)类派生出student(学生)类,添加属性:班号 char classNo7;从people类派生出teacher(教师)类,添加属性:职务char principalship11、 部门char department21。从student类中派生出graduate(研究生)类,添加属性:专业char subject21、导师teacherradviser;从graduate类和teacher类派生出(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。 二、 实验步骤()编写程序声明基类Animal,成员变量age声明为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:error c2248:age:can not access private member declared in class Animal 把改为公有成员变量后重新编译就可以了。 ()编写程序声明一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。 ()用Debug功能跟踪程序(2)的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。()编写程序声明一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和mororcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。 ()编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。三、 实验方案(1)(2)(3)(4)四、 实验结果实验一:编译不通过实验二程序运行结果如下:实验二在lab7_2中,创建了一个派生类DerivedClass的对象a,先调用基类BaseClass的构造函数,再调用派生类DerivedClass的构造函数,当对象a消失时,先调用派生类DerivedClass的析构函数,再调用基类BaseClass的析构函数。由此可见,构造函数和析构函数的调用顺序是相反的。实验三此程序的结果如下:实验三不把vehicle设为虚基类,编译不通过五、 结论实验一从运行结果看,本程序是错误的,原因在于dog类的成员函数无法访问到Animal类的私有成员。将age改为公有成员后,得到如下正确程序:程序运行结果如下:实验二在此程序中,创建了一个派生类的对象,先调用基类的构造函数,再调用派生类的构造函数,当对象消失时,先调用派生类的析构函数,再调用基类的析构函数。由此可见,构造函数和析构函数的调用顺序是相反的。实验二在lab7_2中,创建了一个派生类DerivedClass的对象a,先调用基类BaseClass的构造函数,再调用派生类DerivedClass的构造函数,当对象a消失时,先调用派生类DerivedClass的析构函数,再调用基类BaseClass的析构函数。由此可见,构造函数和析构函数的调用顺序是相反的。实验三如果不把vehicle设为虚基类,系统编译则不通过。原因在于类bicycle、motorcar、motorcycle中的Run、Stop成员函数是从基类vehicle派生而来的,在这些直接基类中从上一级共同基类继承来的成员函数就有相同的名称。在派生类对象中,这些同名函数成员在内存中同时存在拥有多个副本,同一个函数名会有多个映射。解决的办法就是将共同基类vehicle设置为虚基类,这时从不同的路径继承来的同名函数成员在内存中就只有一个副本,同一个函数成员也只有一个映射。六、 问题与讨论问题一:把数据成员设置为共有的,这样合理吗?本人认为在选作题中是可以的,因为你要把人员的信息显示出来,供大家看,就不存在隐私。问题二:关于虚基类的一些调用是如何进行的?将共同基类设置为虚基类,在派生类中声明的对象可以访问到虚基类的公有函数,并且最远的派生类也可以调用其他继承虚基类的派生类中的公有函数。如果虚基类中有同名函数,则调用的函数就取决于对象是哪个类的。以上所有对象必须遵循:慢声明类的对象可以访问先声明的,但是反之不成立。问题三:派生类的构造函数初始化基类的构造函数有什么简便的作法?针对数据过多的构造函数,一个一个初始化,很麻烦,本人到现在也不知
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东广州市海珠区滨江街道市容环境卫生监督检查所招聘环卫工人3人参考题库及答案详解(基础+提升)
- 2025广西壮族自治区中医药研究院招聘编制外工作人员9人参考题库含答案详解(突破训练)
- 2025广东中山市人民政府西区街道办事处所属事业单位第二期招聘事业单位人员3人参考题库及参考答案详解一套
- 2025广东中山市小榄镇人民政府所属事业单位第二期招聘事业单位人员11人参考题库附答案详解(培优)
- 2025广西来宾合山市文化广电和旅游局招聘1人参考题库含答案详解(模拟题)
- 2025年精神类医院考试题及答案
- 2025广西南宁市兴宁区司法局招聘工作人员2人参考题库附答案详解(巩固)
- 教育局工作人员笔试题及答案
- 2025广西崇左凭祥市应急管理局编外工作人员招聘1人参考题库附答案详解(满分必刷)
- 事情处置与响应能力保证承诺书5篇
- 2025年大学《管理科学-管理建模与仿真》考试模拟试题及答案解析
- 2025贵州安顺市公安机关第二批招聘警务辅助人员116人笔试考试备考试题及答案解析
- 动漫分镜美术课件
- 施工安全文明施工奖惩制度汇编
- 认知障碍科普
- AEO企业高级认证介绍
- 2025年军队文职人员招聘考试试题及答案
- 2025至2030石油化工设备市场发展现状分析及行业项目调研及市场前景预测评估报告
- 高铁站隔离开关操作员考试试卷与答案
- 2025年导游资格证考试专项训练 导游业务与政策法规押题试卷
- 中国软件行业协会:2025中国软件行业基准数据报告 SSM-BK-202509
评论
0/150
提交评论