天天看點

類虛基類[置頂] 第十三周項目三——小摩托行駛日記(虛基類的應用)

本文純屬個人見解,是對前面學習的總結,如有描述不正确的地方還請高手指正~

/*
*【項目3】在下面一段類的定義中,自行車類的虛基類為車輛類,機動車類的虛基類也為車輛類,機車類的基類為自行車類和機動車類,類之間均為公有繼承。
* 程式的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 檔案名稱: object.cpp
* 攻城菜鳥:蛋蛋
* 完成日期:2013年  5 月  25 日
* 版本号:  Code Blocks10.05
* 輸入描述:車行駛記錄資料
* 問題描述:要求:
(1)根據下面各類間關系的描述,補全下面程式段中空白的代碼
(2)實作程式中聲明的成員函數,注意響應操縱中的動作産生的條件不能滿意時應給出提示。
(3)運作程式,享受開摩托的程序。(請下載下傳資源中一個可執行檔案,可以先運作再程式設計。不必請求駕照,這個機車很安全。)
(4)在報告中回答問題:本題中使用虛基類的好處是什麼?
* 程式輸出:車的行駛日記
*/
#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):maxSpeed(maxS),weight(w),currentSpeed(0),status(rest){} //構造函數,初始時,目前速度總為0且處在泊車狀态
  void start(){if(currentSpeed==0){status=running;currentSpeed=1;}}  //由rest狀态到running, 初速為1
  void stop(){if(currentSpeed<5){currentSpeed=0;status=rest;}else cout<<"車速大,不答應泊車"<<endl;} //由running狀态到rest, 目前速度小于5時,才答應泊車
  void speed_up(){if(status==running&¤tSpeed>=0)currentSpeed+=1;else cout<<"wrong operation"<<endl;}  //減速,調用1次,速度加1
  void slow_down(){if(status==running&¤tSpeed>=0)currentSpeed-=1;else cout<<"wrong operation"<<endl;} //減速,調用1次,速度減1,速度為0時,泊車
};
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){if(currentSpeed==0&&p+passengerNum<=seatNum&&p+passengerNum>=1) passengerNum+=p;else if(currentSpeed>=5)cout<<"車速過大,沒法泊車 "<<endl;else cout<<"車已滿員或司機師傅,您不能下車"<<endl;}  //增加搭載的搭客,超員要拒載,有人下車時,p為正數。當然車上搭客至少有1個(司機)。隻有車停穩後才能上下客。
};


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(){if(status==rest)cout<<"泊車"<<endl;else  cout<<"行駛"<<endl;
  cout<<"目前時速"<<currentSpeed<<endl;
  cout<<"最大時速"<<maxSpeed<<endl;
  cout<<"搭客人數"<<passengerNum<<endl;
  cout<<"座位數"<<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<<"操縱(啟動)\t"; m.start(); break;
    case '2':
      cout<<"操縱(減速)\t"; m.speed_up(); break;
    case '3':
      cout<<"操縱(減速)\t"; m.slow_down(); break;
    case '4':
      cout<<"操縱(有人上車)\t"; m.addPassenger(); break;
    case '5':
      cout<<"操縱(有人下車)\t"; m.addPassenger(-1); break;
    case '6':
      cout<<"操縱(泊車)\t"; m.stop(); break;
    case '0':
      end=true; break;
    }
    m.show();
    cout<<endl;
    Sleep(200);  //要包含頭檔案<windows.h>
  }
  return 0;
}      

    每日一道理

古人雲:“海納百川,有容乃大。”人世間,不可能沒有沖突和争吵,我們要以磊落的胸懷和寬容的微笑去面對它 。哈伯德也曾說過:“寬恕和受寬恕的難以言喻的快樂,是連神明都會為之羨慕的極大樂事。”讓我們從寬容中享受快樂,從諒解中體會幸福吧!

類虛基類[置頂] 第十三周項目三——小摩托行駛日記(虛基類的應用)
類虛基類[置頂] 第十三周項目三——小摩托行駛日記(虛基類的應用)
類虛基類[置頂] 第十三周項目三——小摩托行駛日記(虛基類的應用)