本文純屬個人見解,是對前面學習的總結,如有描述不正确的地方還請高手指正~
/*
*【項目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;
}
每日一道理
古人雲:“海納百川,有容乃大。”人世間,不可能沒有沖突和争吵,我們要以磊落的胸懷和寬容的微笑去面對它 。哈伯德也曾說過:“寬恕和受寬恕的難以言喻的快樂,是連神明都會為之羨慕的極大樂事。”讓我們從寬容中享受快樂,從諒解中體會幸福吧!