Cpp クラス 継承 新しいページはコチラ
提供: yonewiki
(→クラス 継承) |
|||
5行: | 5行: | ||
<tr> | <tr> | ||
<td style="width:1px;"></td> | <td style="width:1px;"></td> | ||
− | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス 継承</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> | + | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス 継承</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> |
</tr> | </tr> | ||
</table> | </table> | ||
14行: | 14行: | ||
− | + | 初めて継承という言葉を聞く人はそれって便利なの?って思ったかもしれない。なぜなら、若かりし頃、自分もそれって便利なのみたいな感じでした。継承の技術だけを教えてもらったからなのかもしれない。具体的な活用例って大事なんだなと思うところです。だがしかし!具体的な利用例を考えると異常にながくなるのがサンプルプログラム。継承の説明をしているので、サンプルプログラム全体を見通す必要があり、バランスが大事。カンタンなサンプルで且つ、継承が有意義なプログラムに感じる説明が必要になるのです。でも有意義なプログラムって難しくなり勝ちだから、やっぱ、簡便なものを最初は紹介したいと思います。つまり、サンプルは技術を知るためだけの悪い使い方です。有意義な使い方についてはかなり先になってから、もう一度考えようかなって思ってます。 | |
30行: | 30行: | ||
class CBaseInheritance { | class CBaseInheritance { | ||
protected: | protected: | ||
− | int m_iBaseMoney; | + | int m_iBaseMoney = 0; |
− | int m_iBaseMonth; | + | int m_iBaseMonth = 0; |
int m_fiBaseSumMoney(); | int m_fiBaseSumMoney(); | ||
public: | public: | ||
108行: | 108行: | ||
class CDeriveInheritance :public CBaseInheritance { | class CDeriveInheritance :public CBaseInheritance { | ||
private: | private: | ||
− | int m_iOptionMoney; | + | int m_iOptionMoney = 0; |
− | int m_iDeriveMoney; | + | int m_iDeriveMoney = 0; |
public: | public: | ||
CDeriveInheritance(int iArgDeriveMoney, int iArgDeriveMonth, int iArgOptionMoney); | CDeriveInheritance(int iArgDeriveMoney, int iArgDeriveMonth, int iArgOptionMoney); | ||
217行: | 217行: | ||
− | + | 派生クラスを生成させたときに派生クラス側で引数がある場合、派生クラスはもちろん自身のコンストラクタが呼ばれますが、基底クラスでは、何もないコンストラクタが呼ばれます。基底クラスで、引数付きのコンストラクタが存在するクラスを作っていた場合で派生クラスで初期化がされない事がある場合、引数のないコンストラクタを明記しないとダメです。最初から基底クラスにコンストラクタが存在しないなら、引数のないコンストラクタを明記しておく必要はないです。基底クラスが引数付きコンストラクタで初期化処理するクラスで、派生クラスから呼ばれても影響が無いことを証明するようなものです。あるいは影響があっても派生クラスがちゃんとやってくれるんなら許すという感じでもあります。基底クラスになるにしても、基底クラスになる準備が出来ているか?というものは、求められていることになります。今回の場合は、呼び出されたあとに、値が設定されたかが重要になるので、基底のクラスのコンストラクタで、値を受け取って、基底のクラスが使える状態になったか?というのは基底のコンストラクタで記述しないとダメなのかもしれませんが、勉強用なので、特に何もしませんでした。ほったらかしです。 | |
223行: | 223行: | ||
− | + | メイン関数からは、派生クラスが基底クラスを使っているかどうかは、わからないくらいの状態でプログラムされています。インクルードしているヘッダファイルも基底クラスを直接使わない分には、基底クラス用のヘッダファイルを読み込む必要もないです。基底クラスがすべてのことの根幹をなしていて、重要な機能を成しているほど、それをもとに作った、派生したクラスは基底クラスがあって有り難いはず。そして派生クラスは、基底クラスに機能を追加して、充実したものになる。そういう関係が大事だと思います。 | |
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |