メインコンテンツにスキップ
モジュール 6 · レッスン 1 / 2コース内の 13/18~12 min
モジュールのレッスン (1/2)

C++ における継承

継承 は、オブジェクト指向プログラミング (OOP) の重要な柱の 1 つです。これにより、新しいクラス (派生クラスまたは子クラスと呼ばれる) が既存のクラス (基本クラスまたは親クラスと呼ばれる) からメンバー (属性およびメソッド) を継承できるようになり、コードの再利用が促進されます。

基本的な構文

C++ では、継承は派生クラス名の後に : 演算子を使用し、その後にアクセス指定子 (通常は public) と基本クラス名を続けて指定します。

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

アクセス指定子: protected

public および private とともに、継承には protected 指定子が導入されています。

  • 基本クラスの private メンバーには、派生クラスから直接アクセスできません**。
  • 基本クラスの protected メンバーは外部からアクセスできませんが、派生クラス内では直接アクセス可能です。

基本クラスの初期化

コンストラクターは自動的には継承されません。派生クラスをインスタンス化するときは、基本クラスのコンストラクターが最初に呼び出されます。基本クラスに引数が必要な場合は、派生コンストラクターの メンバー初期化子リスト で明示的に呼び出す必要があります。

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

自分で試してみてください

運動#cpp.m6.l1.e1
試行回数: 0読み込み中…

Animal クラスをパブリックに継承する Dog クラスを作成します。 Dog クラスには、std::cout を使用して「Playing」を出力するパブリック play() メソッドが含まれている必要があります。

エディターを読み込み中…
ヒントを表示

「:」構文の後に「public Animal」を使用して基本クラスを拡張し、「play()」メソッドを記述します。

3 回の試行後に解決策が利用可能になります

運動#cpp.m6.l1.e2
試行回数: 0読み込み中…

Vehicle から継承して Car クラスを完成させます。 std::string b を受け入れ、それをメンバー初期化子リストを介して Vehicle コンストラクターに渡す Car のコンストラクターを作成します。

エディターを読み込み中…
ヒントを表示

`Car` コンストラクターで、パラメーターの括弧の直後に構文 `: Vehicle(b)` を使用して、ブランドの初期化を基本クラスに委任します。

3 回の試行後に解決策が利用可能になります