クラスの派生
血統書付き
ここに、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 なものは当然見れない
}
};