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

    在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承,如图所示。


    下载可执行文件链接motorcar.exe.
    (1)根据上面各类间关系的描述,补全下面程序段中空缺的代码;
    (2)实现程序中声明的成员函数,注意相应操作中的动作发生的条件不能满足时应给出提示。
    (3)运行程序,享受开摩托的过程。(可以下载可执行文件motorcar.exe,先运行再编程。不必申请驾照,这个摩托车很安全。)
    #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):maxSpeed(maxS), currentSpeed(0),weight(w), status(rest) {}
    
    
    void Vehicle::start()
    {
        if (status==rest)
        {
            status=running;
            currentSpeed=1;
        }
        else
            cout<<"车辆已经行驶!"<<endl;
    }
    
    void Vehicle::stop()
    {
        if (status==running)
            if(currentSpeed<5)
            {
                status=rest;
                currentSpeed=0;
            }
            else
                cout<<"车速太快!先减速再停车……"<<endl;
        else
            cout<<"车辆未启动!"<<endl;
    }
    
    void Vehicle::speed_up()
    {
        if (status==running)
            if(currentSpeed<maxSpeed)
                ++currentSpeed;
            else
                cout<<"请不要超速行驶……"<<endl;
        else
            cout<<"车辆未启动!"<<endl;
    }
    
    void Vehicle::slow_down()
    {
        if (status==running)
        {
            if(currentSpeed>0)
                --currentSpeed;
        }
        else
            cout<<"车辆未启动!"<<endl;
        if(currentSpeed==0)
            status=rest;
    }
    
    class Bicycle :virtual public Vehicle //()自行车类
    {
    protected:
        double height; //车高
    public:
        Bicycle(int maxS=10, int w=50, int h=0.7);   //定义构造函数
    };
    
    Bicycle::Bicycle(int maxS, int w, int h):Vehicle(maxS, w),height(h) {}
    
    class Motorcar : virtual public Vehicle//()机动车类
    {
    protected:
        int seatNum; //座位数
        int passengerNum; //乘客人数
    public:
        Motorcar(int maxS=150, int w=1500, int s=5, int p=1);   //定义构造函数
        void addPassenger(int p=1);   //搭载乘客,超员要拒载,有人下车时,p为负数。当然车上乘客至少有1个(司机)。上下车时要保证安全……
    };
    
    
    Motorcar::Motorcar(int maxS, int w, int s, int p): Vehicle(maxS, w),seatNum(s),passengerNum(p) {}
    
    
    void Motorcar::addPassenger(int p)
    {
        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 //()摩托车类
    {
    public:
        Motorcycle(int maxS=90, int w=100, int s=3, int p=1, int h=0.7);   //定义构造函数
        void show(); //显示摩托车的运行状态
    };
    
    
    Motorcycle::Motorcycle(int maxS, int w, int s, int p, int h):Vehicle(maxS, w),Bicycle(maxS, w, h),Motorcar(maxS, w, s, p) {}
    
    
    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()返回键盘上读取的字符,应包含头文件<conio.h>
            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;
    }

    运行结果:


    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是1-启动      状态:行进;    车速:1 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:2 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:3 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是4-有人上车  车辆正在行驶,停车后再上下车!
    状态:行进;    车速:3 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是5-有人下车  车辆正在行驶,停车后再上下车!
    状态:行进;    车速:3 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是6-停车      状态:泊车;    车速:0 / 90    当前乘员:1 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是4-有人上车  状态:泊车;    车速:0 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是1-启动      状态:行进;    车速:1 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:2 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:3 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:4 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:5 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是2-加速      状态:行进;    车速:6 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是6-停车      车速太快!先减速再停车……
    状态:行进;    车速:6 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是3-减速      状态:行进;    车速:5 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是3-减速      状态:行进;    车速:4 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    选中的操作是6-停车      状态:泊车;    车速:0 / 90    当前乘员:2 / 3
    
    
    请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束
    状态:泊车;    车速:0 / 90    当前乘员:2 / 3
    
    
    Process returned 0 (0x0)   execution time : 73.297 s
    Press any key to continue.


    @ Mayuko


  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567481.html
Copyright © 2011-2022 走看看