




已阅读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年度毛石石材仓储物流服务合同
- 二零二五年打井降水工程与工程监理合同
- 2025版教育机构合作办学合同范本
- 二零二五年度化妆品电商平台数据分析与优化合同
- 《光伏电站项目全过程管理手册》(第三分册:施工、验收、运维)
- 设计院建筑管理制度
- 2025至2030中国市政公用工程行业项目调研及市场前景预测评估报告
- 安全用电考试题库及答案
- 2025年新麻精药品培训考试试题(含参考答案)
- 浙江保安员考试题库及答案大全
- 仓储超市加盟协议书
- 2025年消防安全管理考试试题及答案
- 《新药审批流程解析》课件
- 学校类物业管理投标文件技术部分完整规范方案
- 抖音蓝v合同协议
评论
0/150
提交评论