クラスの派生

血統書付き


ここに、class A がある。こいつを使って話を進めるぜ。

class A {
public:
  void a();
private:
  void b();
};

クラスは 派生 ができる。これは、他のクラスのメンバを自分に写す言語機能だ。

書き方はこんな感じ。アクセス指定子は普通 public にする。

// : の後に アクセス指定子 クラス名 をカンマ区切りで
class B : public A { // B は A の派生クラスになった
public:
  void c() {
    a(); // 自分のメンバみたいに使える
    b(); // エラー、private なものは見れない
  }
};

アップキャスト

派生したクラスのオブジェクトは、派生元のクラスの参照やポインタとしても扱える

B b;
A &ref = b;
ref.a(); // OK

派生はしない方が良い

ただ、派生は 他のクラスに強く依存してしまう ので、できる限り避けなければならないぞ。

次のページでやる 抽象クラス の派生となると話は別だけど。

大抵は普通に メンバ変数として他クラスのオブジェクトを持てば良い

class B {
  A a;

public:
  void c() {
    a.a();
    a.b(); // エラー、private なものは当然見れない
  }
};