程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 2015級C++第10、11周實踐項目 繼承和派生

2015級C++第10、11周實踐項目 繼承和派生

編輯:關於C++

【項目1 - 點-圓-圓柱類族的設計】
按以下的提示,由基類的設計和測試開始,逐漸地完成各個類的設計,求出圓格柱體的表面積、體積並輸出並且完成要求的計算任務:
(1)先建立一個Point(點)類,包含數據成員x,y(坐標點),實現需要的成員函數,並設計main函數完成測試;
(2)以Point為基類,派生出一個Circle(圓)類,增加數據成員r(半徑),以及求面積的成員函數area,實現其他需要的成員函數,設計main函數完成測試;
(3)再以Circle類為直接基類,派生出一個Cylinder(圓柱體)類,再增加數據成員h(高),,以及求圓柱表面積的成員函數area和求圓柱體積的成員函數volume,實現需要的成員函數,並設計main函數完成測試。
(提示:此任務可以分為三個子任務分成若干步驟進行。先聲明基類,再聲明派生類,逐級進行,分步調試。——這種方法適用於做任何的項目)

【項目2 - 存儲班長信息的學生類】

class Stu   //聲明基類
{
public:
    Stu(int n, string nam );  //基類構造函數
    void display( );          //成員函數,輸出基類數據成員
protected:        //(*)訪問權限為保護型的數據成員
    int num;      //學生學號
    string name;  //學生姓名
};
class StuDetail: public Stu              //聲明派生類StuDetail
{
public:
    //學生nam,學號n,a歲,家住ad,他的班長是nam1,學號n1
    StuDetail(int n, string nam,int a, string ad,int n1, string nam1); //派生類構造函數
    void show( ); //成員函數,輸出學生的信息
    void show_monitor( );    //成員函數,輸出班長信息
private:
    Stu monitor;   //學生所在班的班長,班長是學生,是Stu類的成員
    int age;       //學生年齡
    string addr;   //學生的住址
};
int main( )
{
    //學生王力,10010號,19歲,家住上海的北京路,他的班長是李孫,學號10001
    StuDetail s(10010,"Wang-li",19,"115 Beijing Road,Shanghai",10001,"Li-sun");
    s.show( );                       //輸出學生信息
    s.show_monitor();                //輸出班長信息
    return 0;
}

(1)上面是聲明好的類及測試函數,請完成類中成員函數的定義,使運行結果如圖所示。

(2)將Stu類的數據成員的訪問權限改為private,你的程序是否能完成要求的功能?如果不行,請修改程序。請不要修改給出的代碼,只能修改自己寫的代碼。

【項目3 - 警察和廚師】
(1)根據下面的類圖,定義各個類:
這裡寫圖片描述

要求:
?各個成員函數,只要輸出相關的信息即可,暫不深究其業務功能
?請為各個類增加構造函數
?在實現中,可以增加需要的其他函數
?自行編制main函數,完成初步的測試<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjwvYmxvY2txdW90ZT4NCjxwPqOoMqOpz8LD5rXEwODNvKOszqpQb2xpY8Dgus1Db29rwODU9rzTwcu21M/zs8nUsaOsx+vAqbPktPrC66OszeqzycnPyva498/u0qrH8zxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20160428/20160428084224652.png" title="\" />

【項目4- 教師兼干部類】
  分別定義Teacher(教師)類和Cadre(干部)類,采用多重繼承方式由這兩個類派生出新類Teacher_Cadre(教師兼干部)。
  要求:
  (1)在兩個基類中都包含姓名、年齡、性別、地址、電話等數據成員。
  (2)在Teacher類中還包含數據成員title(職稱),在Cadre類中還包含數據成員post(職務),在Teacher_Cadre類中還包含數據成員wages(工資)。
  (3)對兩個基類中的姓名、年齡、性別、地址、電話等數據成員用相同的名字,在引用這些數據成員時,指定作用域。
  (4)在類體中聲明成員函數,在類外定義成員函數。
  (5)在派生類Teacher_Cadre的成員函數show中調用Teacher類中的display函數,輸出姓名、年齡、性別、職稱、地址、電話,然後再用cout語句輸出職務與工資。
  
【項目5 - 摩托車繼承自行車和機動車】
  在下面一段類的定義中,自行車類的虛基類為車輛類,機動車類的虛基類也為車輛類,摩托車類的基類為自行車類和機動車類,類之間均為公有繼承,如圖所示。
  這裡寫圖片描述
  下載可執行文件鏈接motorcar.exe.
(1)根據上面各類間關系的描述,補全下面程序段中空缺的代碼;
(2)實現程序中聲明的成員函數,注意相應操作中的動作發生的條件不能滿足時應給出提示。
(3)運行程序,享受開摩托的過程。(可以在博客中下載可執行文件,先開摩托,再編程。不必申請駕照,這個摩托車很安全。)
(4)在報告中,請用自己的話寫清楚使用虛基類解決什麼問題?

#include 
#include
#include 
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時,停車
};

class bicycle :_____(1)_________//(1)自行車類的虛基類為車輛類
{
protected:
    double height; //車高
public:
    bicycle(int maxS=10, int w=50, int h=0.7);   //定義構造函數
};

class motorcar : ______(2)__________//(2)機動車類的虛基類也為車輛類
{
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個(司機)。只有車停穩後才能上下客。
};

class motorcycle: ______(3)_________ //(3)摩托車類的基類為自行車類和機動車類
{
public:    
    motorcycle(int maxS=90, int w=100, int s=3, int p=1, int h=0.7);//定義構造函數
    void show(); //顯示摩托車的運行狀態
};

int main( )
{
    motorcycle m;
    bool end=false;
    while (!end)
    {
        cout<<"請操作:1-啟動  2-加速  3-減速  4-有人上車  5-有人下車  6-停車 0-結束"<
    }
    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.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved