網頁

2022/8/18

C++ 類別繼承 classes inheritance

C++繼承(inheritance)是指一個類別繼承另一個類別來獲得其特性。


繼承語法

類別繼承的語法如下:。

  • DerivedClassName - 繼承類別名稱,也稱為衍生類別(derived class)、子類別(child class),即繼承BaseClassName的類別名稱。
  • access_specifier - 存取修飾符publicprotectedprivate,設定繼承類別DerivedClassName可從被繼承類別BaseClassName繼承的成員存取限制。若被繼承類別的成員存取範圍超過繼承定義的範圍則以繼承定義的存取範圍為準;反之則以被繼承類別的成員存取範圍為準。
  • BaseClassName - 被繼承類別名稱,也稱為基底類別(base class)、父類別(parent class),即被DerivedClassName繼承的類別。
class DerivedClassName: access_specifier BaseClassName {...}

以類別圖(class diagram)來表示繼承關係如下:

┌──────────────┐
│              │
│  BaseClass   │
│              │
└──────────────┘
       ▲
       │
       │
┌──────┴───────┐
│              │
│ DerivedClass │
│              │
└──────────────┘

例如下面的類別CarBoat繼承了Vehicle類別,因此CarBoat除了本身的成員也擁有被繼承類別Vehicle的成員speed、建構式Vehicle(int speed)及函式GetSpeed()

main.cpp

#include <iostream>
#include <string>
using namespace std;

class Vehicle {
    protected:
        int speed;

    public:
        Vehicle(int speed) : speed(speed) {}

        int GetSpeed() { return speed; }
};

class Car : public Vehicle {
    private:
        string wheelSize;

    public:
        Car(int speed, string wheelSize) : Vehicle(speed), wheelSize(wheelSize){};

        string GetWheelSize() { return wheelSize; }
};

class Boat : public Vehicle {
    private:
        string paddleSize;

    public:
        Boat(int speed, string paddleSize) : Vehicle(speed), paddleSize(paddleSize){};

        string GetPaddleSize() { return paddleSize; }
};

int main() {
    Car car = {100, "15 inch"};
    cout << car.GetSpeed() << endl;     // 100
    cout << car.GetWheelSize() << endl; // 15 inch

    Boat boat = {80, "200 cm"};
    cout << boat.GetSpeed() << endl;      // 80
    cout << boat.GetPaddleSize() << endl; // 200 cm

    return 0;
}

CarBoat繼承Vehicle的類別圖如下:

        ┌─────────┐
        │         │
        │ Vehicle │
        │         │
        └─────────┘
             ▲
             │
     ┌───────┴───────┐
     │               │
┌────┴────┐     ┌────┴────┐
│         │     │         │
│   Car   │     │  Boat   │
│         │     │         │
└─────────┘     └─────────┘


沒有留言:

張貼留言