/*copyright(c)2016.烟台大学计算机学院* All rights reserved,* 文件名称:text.Cpp* 作者:刘涛* 完成日期:2016年5月9日* 版本号:vc++6.0* 问题描述:在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承,如图所示。下载可执行文件链接motorcar.exe.(1)根据上面各类间关系的描述,补全下面程序段中空缺的代码;(2)实现程序中声明的成员函数,注意相应操作中的动作发生的条件不能满足时应给出提示。(3)运行程序,享受开摩托的过程。(可以在博客中下载可执行文件,先开摩托,再编程。不必申请驾照,这个摩托车很安全。)*/#include <iostream>
#include<conio.h>
#include <windows.h>
using namespace std;
enum vehicleStaus {rest, running};  //车辆状态:泊车、行进
class vehicle //车辆类
{
protected:int maxSpeed;       //最大车速int currentSpeed;   //当前速度int weight;         //车重vehicleStaus status; //rest-泊车状态;running-行进状态
public:vehicle(int maxS, int w); //构造函数,初始时,当前速度总为0且处在停车状态void start();  //由rest状态到running, 初速为1void stop(); //由running状态到rest, 当前速度小于5时,才允许停车void speed_up();  //加速,调用1次,速度加1void slow_down(); //减速,调用1次,速度减1,速度为0时,停车
};
vehicle::vehicle(int maxS,int w)
{maxSpeed=maxS;weight=w;currentSpeed=0;status=rest;
}
void vehicle::start()
{if(status==running)currentSpeed=1;elsestatus=running;currentSpeed=1;cout<<"车辆已启动"<<endl;
}
void vehicle::stop()
{if(status==running){if(currentSpeed<5){status=rest;currentSpeed=0;cout<<"车辆已经停靠"<<endl;}else cout<<"车速太快,请减速再停车"<<endl;}elsecout<<"车辆已经处于rest状态,不需要停车"<<endl;
}
void vehicle::speed_up()
{if(status==running){currentSpeed++;}elsecout<<"车辆处于rest状态,请先启动车辆"<<endl;status=running;
}
void vehicle::slow_down()
{if(status==running){if(currentSpeed==1){cout<<"车辆速度减一,已经停车"<<endl;status=rest;currentSpeed=0;}elsecurrentSpeed--;}elsecout<<"车辆处于rest状态,不需要减速!"<<endl;
}
/*--------------------------------------------------------------------------------------------------*/
class bicycle :virtual public vehicle//(1)自行车类的虚基类为车辆类
{
protected:double height; //车高
public:bicycle(int maxS=10, int w=50, int h=0.7):vehicle(maxS,w),height(h){}   //定义构造函数
};
/*---------------------------------------------------------------------------------------------------*/
class motorcar :virtual public vehicle//(2)机动车类的虚基类也为车辆类
{
protected:int seatNum; //座位数int passengerNum; //乘客人数
public:motorcar(int maxS=150, int w=1500, int s=5, int p=1):vehicle(maxS,w),seatNum(s),passengerNum(p){}  //定义构造函数void addPassenger(int p);   //增加搭载的乘客,超员要拒载,有人下车时,p为负数。当然车上乘客至少有1个(司机)。只有车停稳后才能上下客。
};
void motorcar::addPassenger(int p)
{if(status==rest){if(seatNum>=passengerNum+p){cout<<"车辆可以搭载所有乘客而且不超载"<<endl;passengerNum=passengerNum+p;}else{passengerNum=seatNum;cout<<"车辆已经满员,无法搭载所有乘客,并且拒载了"<<passengerNum+p-seatNum<<"位乘客"<<endl;}}elsecout<<"车辆正在行驶,请停车后再上下车"<<endl;
}
/*--------------------------------------------------------------------------------------------------*/
class motorcycle:public bicycle,public motorcar  //(3)摩托车类的基类为自行车类和机动车类
{
public:motorcycle(int maxS=90, int w=100, int s=3, int p=1, int h=0.7):vehicle(maxS,w),bicycle(maxS,w,h),motorcar(maxS,w,s,p){}//定义构造函数void show(); //显示摩托车的运行状态
};
void motorcycle::show()
{cout<<"状态:";if(status==running)cout<<"行进;";elsecout<<"泊车;";cout<<"车速:"<<currentSpeed<<"/"<<maxSpeed<<"    "<<"当前乘员:"<<passengerNum<<"/"<<seatNum<<endl;
}
/*--------------------------------------------------------------------------------------------------*/
int main()
{motorcycle m;bool end=false;while (!end){cout<<"请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束"<<endl;char keydown= _getch(); //_getch()返回键盘上读取的字符switch(keydown){case '1':cout<<"选中的操作是1-启动\t";m.start();break;case '2':cout<<"选中的操作是2-加速\t";m.speed_up();break;case '3':cout<<"选中的操作是3-减速\t";m.slow_down();break;case '4':cout<<"选中的操作是4-有人上车\t";m.addPassenger(1);break;case '5':cout<<"选中的操作是5-有人下车\t";m.addPassenger(-1);break;case '6':cout<<"选中的操作是6-停车\t";m.stop();break;case '0':end=true;break;}m.show();cout<<endl;Sleep(200);  //要包含头文件<windows.h>}return 0;
}
运行结果:
<img src="https://img-blog.csdn.net/20160509110917399?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20160509110922991?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20160509110926868?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
知识点:虚基类。
学习心得:
1.枚举类型的使用,当状态需要在几个状态之间切换时很好使。
2.还有就是做题时候需要考虑实际情况,不能为所欲为。
3.还有一个问题就是这里的摩托车和自行车好像没有怎么用得到,主函数最后输出的时候,他们的速度,重量,高度什么的都不没有用。
4.虚基类的作用:当某类的部分或者全部直接基类是从另一个共同基类派生而来的,在派生类的对象中,这些同名数据成员就会有多个副本,占用内存,这时候就用虚基类将共同基类设置为虚基类,这时从不同的路径继承过来的同名数据成员在内存中就只有一个副本,同一个函数名也只有一个映射。

第十周第十一周上机实践项目-项目5-摩托车继承自行车和机动车相关推荐

  1. 第十、十一周项目五 - 摩托车继承自行车和机动车

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月10日*版 本 号:v1. ...

  2. 第十一周——摩托车继承自行车和机动车 (1)

    [cpp] vi /* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:text.cpp *作者:李德彪 *完成日期:2015年5月 ...

  3. 第12周项目2—摩托车继承自行车和机动车

    问题及代码: /** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作 者:李盈盈* 完成日期:2015年 0 ...

  4. C++实践参考——摩托车继承自行车和机动车

    [项目 - 摩托车继承自行车和机动车] 在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承,如图所示. 下载可执行文件链 ...

  5. 第十一章——摩托车继承自行车和机动车 (2)

    /* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:text.cpp *作者:李德彪 *完成日期:2015年5月16日 *版本号: ...

  6. C++程序设计-第九周分支结构程序设计上机实践项目

    回到课程主页,链接:C++程序设计课程主页-2012级 本次上机对应的教学内容:第3章   C++程序设计初步中分支程序设计的部分. 练习+上机验证 [练习1]阅读下列程序,在准备期写出程序的运行结果 ...

  7. 2019第十一周作业

    这个作业属于哪个教程 C语言程序设计Ⅱ 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/ ...

  8. 20189200余超 2018-2019-2 移动平台应用开发实践第十一周作业

    20189200余超 2018-2019-2 移动平台应用开发实践第十一周作业 制作视频 本节是Android多媒体基本API调用的一节,带来的是MediaRecord的简单使用, 用法非常简单,我们 ...

  9. 合天网安 在线实验 CTF竞赛 writeup(第六周 | 套娃一样的上传、第二十一周 | 你的空格哪去了、第十周 | 试试协议吧、第十一周 | 签到般的包含、第九周 | 试下phpinfo吧)

    文章目录 第六周 | 套娃一样的上传 第二十一周 | 你的空格哪去了 第十周 | 试试协议吧 第十一周 | 签到般的包含 第九周 | 试下phpinfo吧 第六周 | 套娃一样的上传 图片上传题目,看 ...

最新文章

  1. 新晋技术Leader每天996,CTO却给他绩效打C,留下一句话...
  2. JavaScript设计模式与开发实践——JavaScript的多态
  3. java伪协议_JavaScript中伪协议 javascript:使用探讨
  4. 如何使用代码的方式删除 SAP CRM 订单 Text 数据
  5. [短彩信]C#短彩信模块开发设计(2)——配置
  6. 牛逼!支付宝高级Java三面题目:线程锁+事务+雪崩+Docker等
  7. Qt之表单布局(QFormLayout)
  8. http://bsideup.blogspot.com/2015/04/spring-boot-thrift-part3.html
  9. python opencv天空提取_python利用opencv实现印章的提取
  10. 微博客程序 Yonkly
  11. design php 如何使用ant_Ant Design Pro如何调用接口 | Ant Design Pro渲染数据 绑定数据...
  12. pip安装faiss
  13. 基于EPON+EOC技术构建广电综合业务宽带接入网
  14. 限时免费领取育碧75元游戏《纪元Anno1404:历史版》
  15. 关于创新创业的书,看这两本就够了
  16. python opencv制作隐藏图片
  17. Long tailed 长尾分布论文汇总
  18. 谷歌账号被封怎么办?谷歌账号解封申诉步骤请收好!
  19. win10计算器_30年的老树又开新花!新一代Win10记事本详细体验
  20. PHPMailer远程命令执行漏洞复现

热门文章

  1. 捷径体系:让员工自发地循环工作的管理体系
  2. Delphi Thread 线程(1)
  3. CentOS6.9编译安装Sphinx并使用php7的sphinx扩展实现全文搜索
  4. centos备份远程mysql数据库,CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期...
  5. 数学——结构、发现与思维
  6. Kaggle机器学习大师课程
  7. 5320常见问题解答
  8. 没有学历文凭,如何成为一名优秀的 Java 程序员
  9. python结构排序_Python数据结构(七)排序算法 上
  10. C语言 sizeof关键字