- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验八 多态性与虚函数
实验目的
了解多态性的两种表现形式:函数重载和虚函数
了解赋值兼容原则的含义
掌握虚函数的定义方法及作用
一、实验任务:
1. 虚函数练习
(1)设计一个抽象类Shape,其中包括double area 和double Area();
(2 )以public 方式从Shape 派生出Circle 和Rectangle 两个派生类,添加相关的数据成
员(Circle: radius,PI; Rectangle:width,height )、有参构造函数、重写Area 函数;
(3 )设计主函数:要求定义一个4 元素Shape 类指针数组,数组元素初始化为NULL ,
动态创建2 个Circle 对象和2 个Rectangle 对象,用上面的指针数组操作4 个对象,设
计循环求算它们的面积总和。
调试程序,分析理解虚函数动态联编的原理。
2. 自行车(Bicycle )和汽车(Motorcar )都是车辆(Vehicle ),它们有共同的属性最大速度
(maxSpeed )和重量(weight ),也有各自不同的特性,比如自行车的高度(height )和
汽车的座位数(seatNum)。现有车辆若干(实验时设 N=3 ),将其输入并放入一个指针
数组,每个车辆需要设置其属性。输入后分类显示各自属性(即自行车和汽车分别显示
各自属性)。
(1)基本思路:
创建类Vehicle 及其派生类;设基类为Vehicle ,具有属性maxSpeed 和weight ,其中有
一个虚函数print 显示属性,由派生类负责解释具体的属性。由Vehicle 派生两个类Bicycle
和Motocar ,Bicycle 的属性为height ;而Motocar 的属性为seatNum。
(2 )main 中创建指针数组:main 中创建一个指针数组Vehicle* pvehicle[N];并将其中指
针置空。
(3 )main 中的输入:
用一个循环次数少于N 的循环(while 或for )下面是循环中进行的工作:
询问用户是Bicycle 还是Motocar ,或者退出循环?
如果是Bicycle 则创建Bicycle 的堆对象;否则创建Motocar 的堆对象vcl 。(使用
new )
将该对象的地址记录到指针数组pvehicle[] 的空白处。(也可先找到这个空白处,再
创建堆对象)
询问用户新输入的车辆的maxSpeed 和weight ,将这两个参数记录到这个对象vcl
中。
根据是Bicycle 还是Motocar 输入height 或者seatNum 。
(4 )main 中的输出:
建立循环(for 0 ~ N- 1)。在循环中:
检测指针数组中pvehicle[i] (第i 个指针)是否为空?
调用虚函数print()输出属性。(因为有动态联编,所以不用区分是Bicycle 还是Motocar )。
(5 )main 中释放空间:
将指针数组pvehicle[] 中非空指针释放空间(用delete )。
3. 某学校实现进出校园的车辆管理,试用类的形式记录车辆的进出(类名为CampusAutos )。
有车进来时用 new 的方法构建一个新的对象,记录它的牌照(8 个字符的字符串,
licensetag ),离开校园时即析构。在 main() 中设一循环,每次可以输入车辆进入及牌照
号或某牌照号的车辆出去(校园内限N 辆,暂设为 5),同时报告校园内现有多少辆汽
车及它们的牌照号。(用对象指针数组)注意:程序中要实现数组溢出保护(车位已满)、
牌照输入错误 (超8 个字符)和查询失败报告 (无此牌照)。停车时要注意重复车牌问
题。
void main()
{
CampusAutos *parkingSpace[N];
for(int i=0;iN;i++) // 停车场初始化为空
parkingSpace[i] = null;
for(;;)
文档评论(0)