Cpp クラス 継承 新しいページはコチラ
提供: yonewiki
(→クラス 継承) |
(→クラス 継承) |
||
217行: | 217行: | ||
− | + | 派生クラスを生成させたときに派生クラス側で引数がある場合、派生クラスはもちろん自身のコンストラクタが呼ばれますが、基底クラスでは、何もないコンストラクタが呼ばれます。基底クラスで、引数付きのコンストラクタが存在する場合は自分自身が呼ばれなくてもいいことを許すことを示すように、引数のないコンストラクタを明記しないとダメです。最初から基底クラスにコンストラクタが存在しないなら、引数のないコンストラクタを明記しておく必要はないです。基底クラスが引数付きコンストラクタで初期化処理するクラスで、派生クラスから呼ばれても影響が無いことを証明するようなものです。あるいは影響があっても派生クラスがちゃんとやってくれるんなら許すという感じでもあります。基底クラスになるにしても、基底クラスになる準備が出来ているか?というものは、求められていることになります。今回の場合は、呼び出されたあとに、値が設定されたかが重要になるので、基底のクラスのコンストラクタで、値を受け取って、基底のクラスが使える状態になったか?というのは基底のコンストラクタで記述しないとダメなのかもしれませんが、勉強用なので、特に何もしませんでした。ほったらかしです。 | |
− | + | 今回のサンプルのように、継承という手法は基底側と派生側とが完璧な関係でないパターンは良くない継承の使い方にも見えます。継承の機能は使い方が大事ということは、なんとなくわかったかなぁと思います。もっといい継承の使い方は、全てを理解したあとで、考えましょう。プログラムに正解はないので、よりよいと思われるとか、あまりよくないとか、本来の使い方とは違うとかいろいろあるのかもしれませんが、目的は達成してしまうことがあるのがプログラムです。後から、機能を追加したり、見直したりするときにわかりやすいとか、いろいろな要素があるので、完璧というのは、難しいです。言語仕様がわかっていて、結果もでていて、まぁメンテナンスもできるし、いいんじゃないかなぁというプログラムでも誰かが見れば、いや、これはこういう使い方しない方がよいのでは?と思われるくらい、奥がふかいので、ここでは誰もが納得のいく答えが提供できる気がしないですが、もう少しくらいは、ゆっくり考えてみたいと思います。後で。(先延ばし主義) | |
+ | |||
+ | |||
+ | メイン関数からは、派生クラスが基底クラスを使っているかどうかは、わからないくらいの状態でプログラムされています。インクルードしているヘッダファイルも基底クラスを直接使わない分には、基底クラス用のヘッダファイルを読み込む必要もないです。基底クラスがすべてのことの根幹をなしていて、偉そうなやつほど、それをもとに作った、派生したクラスは基底クラスがあって有り難いはず。そして派生クラスは、基底クラスに機能を追加して、充実したものになる。そういう関係が大事だと思います。 | ||
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |