C++繼承(inheritance)是指一個類別繼承另一個類別來獲得其特性。
繼承語法
類別繼承的語法如下:。
DerivedClassName
- 繼承類別名稱,也稱為衍生類別(derived class)、子類別(child class),即繼承BaseClassName
的類別名稱。access_specifier
- 存取修飾符public
、protected
、private
,設定繼承類別DerivedClassName
可從被繼承類別BaseClassName
繼承的成員存取限制。若被繼承類別的成員存取範圍超過繼承定義的範圍則以繼承定義的存取範圍為準;反之則以被繼承類別的成員存取範圍為準。BaseClassName
- 被繼承類別名稱,也稱為基底類別(base class)、父類別(parent class),即被DerivedClassName
繼承的類別。
class DerivedClassName: access_specifier BaseClassName {...}
以類別圖(class diagram)來表示繼承關係如下:
┌──────────────┐
│ │
│ BaseClass │
│ │
└──────────────┘
▲
│
│
┌──────┴───────┐
│ │
│ DerivedClass │
│ │
└──────────────┘
例如下面的類別Car
及Boat
繼承了Vehicle
類別,因此Car
及Boat
除了本身的成員也擁有被繼承類別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;
}
Car
、Boat
繼承Vehicle
的類別圖如下:
┌─────────┐
│ │
│ Vehicle │
│ │
└─────────┘
▲
│
┌───────┴───────┐
│ │
┌────┴────┐ ┌────┴────┐
│ │ │ │
│ Car │ │ Boat │
│ │ │ │
└─────────┘ └─────────┘
沒有留言:
張貼留言