首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 繼承與派生實戰專案:從點圓圓柱到多重繼承菱形問題

     編輯:關於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 函式完成初步測試

【專案 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-結束" << endl;
        char keydown = _getch(); // 需包含 conio.h 和 windows.h
        switch (keydown) {
            case '1': m.start(); break;
            case '2': m.speed_up(); break;
            case '3': m.slow_down(); break;
            case '4': m.addPassenger(1); break;
            case '5': m.addPassenger(-1); break;
            case '6': m.stop(); break;
            case '0': end = true; break;
        }
        m.show();
    }
    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. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved