zoukankan      html  css  js  c++  java
  • 第十二周 【项目2

    【项目2 - 摩托车继承自行车和机动车】

    在以下一段类的定义中,自行车类的虚基类为车辆类。机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类。类之间均为公有继承,如图所看到的。
    下载可运行文件链接motorcar.exe.
    (1)依据上面各类间关系的描写叙述,补全以下程序段中空缺的代码;
    (2)实现程序中声明的成员函数,注意对应操作中的动作发生的条件不能满足时应给出提示。
    (3)执行程序。享受开摩托的过程。

    (能够下载可执行文件motorcar.exe,先执行再编程。不必申请驾照,这个摩托车非常安全。)
    (4)在报告中,请用自己的话写清楚使用虚基类解决什么问题?

    1. #include <iostream>  
    2. #include<conio.h>  
    3. #include <windows.h>  
    4. using namespace std;  
    5. enum vehicleStaus {rest, running};  //车辆状态:泊车、行进  
    6. class vehicle //车辆类  
    7. {  
    8. protected:  
    9.     int maxSpeed;       //最大车速  
    10.     int currentSpeed;   //当前速度  
    11.     int weight;         //车重  
    12.     vehicleStaus status; //rest-泊车状态;running-行进状态  
    13. public:  
    14.     vehicle(int maxS, int w); //构造函数,初始时,当前速度总为0且处在停车状态  
    15.     void start();  //由rest状态到running, 初速为1  
    16.     void stop(); //由running状态到rest, 当前速度小于5时。才同意停车  
    17.     void speed_up();  //加速,调用1次。速度加1  
    18.     void slow_down(); //减速,调用1次,速度减1。速度为0时,停车  
    19. };  
    20.   
    21. class bicycle :_____(1)_________//(1)自行车类的虚基类为车辆类  
    22. {  
    23. protected:  
    24.     double height; //车高  
    25. public:  
    26.     bicycle(int maxS=10, int w=50, int h=0.7);   //定义构造函数  
    27. };  
    28.   
    29. class motorcar : ______(2)__________//(2)机动车类的虚基类也为车辆类  
    30. {  
    31. protected:  
    32.     int seatNum; //座位数  
    33.     int passengerNum; //乘客人数  
    34. public:  
    35.     motorcar(int maxS=150, int w=1500, int s=5, int p=1);   //定义构造函数  
    36.     void addPassenger(int p=1);   //添加搭载的乘客,超员要拒载,有人下车时。p为负数。

      当然车上乘客至少有1个(司机)。仅仅有车停稳后才干上下客。  

    37. };  
    38.   
    39. class motorcycle: ______(3)_________ //(3)摩托车类的基类为自行车类和机动车类  
    40. {  
    41. public:      
    42.     motorcycle(int maxS=90, int w=100, int s=3, int p=1, int h=0.7);//定义构造函数  
    43.     void show(); //显示摩托车的执行状态  
    44. };  
    45.   
    46. int main( )  
    47. {  
    48.     motorcycle m;  
    49.     bool end=false;  
    50.     while (!end)  
    51.     {  
    52.         cout<<"请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束"<<endl;  
    53.         char keydown= _getch(); //_getch()返回键盘上读取的字符  
    54.         switch(keydown)  
    55.         {  
    56.         case '1':  
    57.             cout<<"选中的操作是1-启动 ";  
    58.             m.start();  
    59.             break;  
    60.         case '2':  
    61.             cout<<"选中的操作是2-加速 ";  
    62.             m.speed_up();  
    63.             break;  
    64.         case '3':  
    65.             cout<<"选中的操作是3-减速 ";  
    66.             m.slow_down();  
    67.             break;  
    68.         case '4':  
    69.             cout<<"选中的操作是4-有人上车 ";  
    70.             m.addPassenger();  
    71.             break;  
    72.         case '5':  
    73.             cout<<"选中的操作是5-有人下车 ";  
    74.             m.addPassenger(-1);  
    75.             break;  
    76.         case '6':  
    77.             cout<<"选中的操作是6-停车 ";  
    78.             m.stop();  
    79.             break;  
    80.         case '0':  
    81.             end=true;  
    82.             break;  
    83.         }  
    84.         m.show();  
    85.         cout<<endl;  
    86.         Sleep(200);  //要包括头文件<windows.h>  
    87.     }  
    88.     return 0;  
    89. }  


    參考执行结果例如以下:

    /*
    *Copyright (c)2014,烟台大学计算机与控制project学院
    *All rights reserved.
    *文件名:d.cpp
    *作    者:张旺华
    *完毕日期:2015年6月3日
    *版 本 号:v1.0
    */
    #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, 初速为1
        void stop(); //由running状态到rest, 当前速度小于5时。才同意停车
        void speed_up();  //加速,调用1次。速度加1
        void slow_down(); //减速。调用1次。速度减1,速度为0时,停车
    };
    vehicle::vehicle(int maxS, int w) //构造函数,初始时,当前速度总为0且处在停车状态
    {
        maxSpeed=maxS;
        weight=w;
        currentSpeed=0;
        status=rest;
    }
    void vehicle::start()  //由rest状态到running, 初速为1
    {
        currentSpeed=1;
        status=running;
    }
    void vehicle::stop() //由running状态到rest, 当前速度小于5时。才同意停车
    {
        if(currentSpeed<5)
        {
            currentSpeed=0;
            status=rest;
        }
        else
        {
            cout<<"当前速度太快。请减速后停车"<< endl;
        }
    }
    void vehicle::speed_up()  //加速,调用1次,速度加1
    {
        if(currentSpeed==maxSpeed)
            cout<<"当前速度达到最大不能再进行加速。

    "<<endl; else currentSpeed++; } void vehicle::slow_down() //减速。调用1次,速度减1,速度为0时,停车 { if(currentSpeed==0) cout<<"当前速度为0,无需减速。"<<endl; else currentSpeed--; } 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=1); //添加搭载的乘客。超员要拒载,有人下车时,p为负数。当然车上乘客至少有1个(司机)。仅仅有车停稳后才干上下客。

    }; void motorcar::addPassenger(int p) //添加搭载的乘客,超员要拒载。有人下车时。p为负数。

    当然车上乘客至少有1个(司机)。仅仅有车停稳后才干上下客。

    { if (status==running) { cout<<"车辆正在行驶,停车后再上下车!

    "<<endl; } else { passengerNum+=p; if(passengerNum>seatNum) { passengerNum=seatNum; cout<<"涉嫌超员,已清理后达到满员。"<<endl; } else if (passengerNum<1) { passengerNum=1; cout<<"请司机不要离开岗位!"<<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==rest) cout<<"泊车; "; else cout<<"行进; "; 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-启动 "; m.start(); break; case '2': cout<<"选中的操作是2-加速 "; m.speed_up(); break; case '3': cout<<"选中的操作是3-减速 "; m.slow_down(); break; case '4': cout<<"选中的操作是4-有人上车 "; m.addPassenger(); break; case '5': cout<<"选中的操作是5-有人下车 "; m.addPassenger(-1); break; case '6': cout<<"选中的操作是6-停车 "; m.stop(); break; case '0': end=true; break; } m.show(); cout<<endl; Sleep(200); //要包括头文件<windows.h> } return 0; }

    执行结果:



    知识点运用:

    在这里使用了 枚举来定义车辆的 状态,使它更加生动。

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5144032.html
Copyright © 2011-2022 走看看