Cpp クラス 多重継承

提供:yonewiki

C++に戻る


本来の表記は「C++(Cpp) クラス 多重継承」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ クラス 多重継承になっています。

クラス 多重継承

 1つのクラスは2つの基底クラスあるいはそれ以上の数の基底クラスを持つことが出来ます。1つのクラスは1つの基底クラスを持ち、基底クラスがさらに基底クラスを持つことも出来ます。そして更にその基底クラスと幾つも基底くらすを持ち続ける構造もありえます。真ん中に挟まれたクラスは、あるときは基底クラス、あるときは派生クラス。そしてのその正体は!みたいな感じ?そういう感じになります。こうなると複雑な継承もバシバシ考えつきます。1つのクラスが2つの基底クラスをもち、その2つの基底クラスは共通の基底クラスをもつという形式。他にも1つのクラスが2つの基底クラスをもち、それぞれの基底クラスが各々別の基底クラスをもつというパターン。このようなことの組み合わせによる深い階層の継承や結合と分解を繰り返す継承。もの凄い沢山のパターンが考えられます。そんな中で、ある部分で重複したり、ある部分は仮想関数だったり、派生クラスが仮想関数補うオーバライドだったり純粋仮想関数がふくまれていたり、初期化指定子があったり、引数の数が違う多重定義(オーバロード)があったり、実に複雑なことが山のように生まれ、重複可能なのか?そんなことが許されるのかという部分があって、全貌をつかむのは、簡単ではないですが、基本的な部分を理解することにより、全体の仕組みを理解しようという試みをここでやっていきたいと思います。ある程度、使い方のイメージを持ちながらも、シンプルな構造のサンプルでより多くを学べるようにしようと考えていますが、どうしたらいいか、少しゆっくり考えてみようと思います。


 やだな。考えるの。でも、考えないといけないよね。人に伝えるというのは難しいね。頑張ろ。実際はそれほど複雑な継承を使うことは無いので、かるい気持ちで考えつつも、深く知っておくという感じでしょうか。


 で、ちょっと考えた訳ですが、継承の説明で使ってきた割引のクラスが基本料金だけにしか適用できないのが、機能として不足しているように感じます。オプションの料金だって割り引かれていいはずです。なので、基本料金(基底)→(派生)オプション料金(基底)→(派生)割引のような構造の3段階のクラスにわかれた感じにしてみようと思います。それでオプション料金のクラスは2種類ありました。単体のシンプルな料金と、いくつものオプションを買った場合につかう配列、料金のクラス。ですから2種類に分岐して1.基本料金(基底)→(派生)単体オプション料金(基底)→(派生)割引、2.基本料金(基底)→(派生)配列、複数料金オプション料金(基底)→(派生)割引ということになります。派生の頂上にいるのが割引のクラスで、両方の共通のクラスになって二つの機能を有することを目的とします。


 せっかく作ってきたオプション料金、割引料金対応のサブスク料金計算クラスでしたが、一度解体して、組みなおしてみましょう。


 なんか、今思いついたみたいに言ってるけど、ホントはさいしょからこうするために、伏線張ってただけじゃねぇの?と感じる人もいるかもしれませんが、思い付きで行き当たりばったりやっています。でも、なかなかいい感じの考え方になっていると思います。


 作ったクラスはそれほど変更せずに、組みなおすだけで、意外と使えたりすることも体感できると思います。くっそみたいなサンプルですが、クラスの醍醐味が感じれるとは奇跡っすな。


C++に戻る