拡張クラスが既存のクラスのメンバを受け継ぐことを継承(inheritance)と呼ぶ
基本クラス、新しいクラスは派生クラスと呼ぶ
### 継承
class Car { private: int num; double gas; public: Car(); void setCar(int n, double g); void show(); }; class RacingCar : public Car { private: int course; public: RacingCar(); void setCourse(int c); }; Car::Car() { num = 0; gas = 0.0; cout << "車を作成しました。\n"; } void Car::setCar(int n, double g){ num = n; gas = g; cout << "車のナンバーを" << num << "ガソリン量を" << gas << "にしました。\n"; } void Car::show(){ cout << "車のナンバーは" << num << "です。\n"; cout << "ガソリン量は" << gas << "です。\n"; } RacingCar::RacingCar(){ course = 0; cout << "レーシングカーを作成しました。\n"; } void RacingCar::setCourse(int c){ course = c; cout << "コース番号を" << course << "にしました。\n"; } int main() { RacingCar rccar1; rccar1.setCar(1234, 20.5); rccar1.setCourse(5); return 0; }
$ g++ -o sample sample.cpp && ./sample
車を作成しました。
レーシングカードを作成しました。
車のナンバーを1234ガソリン量を20.5にしました。
コース番号を5にしました。
### 基本クラスのコンストラクタを指定
RacingCar::RacingCar(int n, double g, int c): Car(n, g) が呼び出されるようになる。
class Car { private: int num; double gas; public: Car(); Car(int n, double g); void setCar(int n, double g); void show(); }; class RacingCar : public Car { private: int course; public: RacingCar(); RacingCar(int n, double g, int c); void setCourse(int c); }; Car::Car() { num = 0; gas = 0.0; cout << "車を作成しました。\n"; } Car::Car(int n, double g){ num = n; gas = g; cout << "ナンバー" << num << "ガソリン量" << gas << "の車を作成しました。\n"; } void Car::setCar(int n, double g){ num = n; gas = g; cout << "車のナンバーを" << num << "ガソリン量を" << gas << "にしました。\n"; } void Car::show(){ cout << "車のナンバーは" << num << "です。\n"; cout << "ガソリン量は" << gas << "です。\n"; } RacingCar::RacingCar(){ course = 0; cout << "レーシングカーを作成しました。\n"; } RacingCar::RacingCar(int n, double g, int c): Car(n, g){ course = 0; cout << "コース番号" << course << "のレーシングカーを作成しました。\n"; } void RacingCar::setCourse(int c){ course = c; cout << "コース番号を" << course << "にしました。\n"; } int main() { RacingCar rccar1(1234, 20.5, 5); return 0; }