2013年11月29日金曜日

C++ 継承


継承とは、すでにあるクラスを利用して、新しいクラスを作ることです^^
基にするクラスを基底クラス、基底クラスを継承して作ったクラスのことを
派生クラスといいます。

例えば、親クラスとして Food クラスを定義します。
そして、このFoodクラスのメンバに、新たにメンバを追加したVegetableクラス
というものを作りたいとします。
ここで、継承の機能を使えば、Foodクラスのメンバを受け継いだ子クラスが作れるのです。
受け継いだということは、もちろん親クラスのメンバ自身も使用できます。(^^)

少々分かり難いと思いますので、ソースコードで表現してみるとこんな感じになります。

基底クラス(Food)
class Food {
public:
    void SetPrice(int price);
    int GetPrice( );
private:
    int m_price;
};

基底クラスを継承したクラス(Vegetable)
class Vegetable : public Food {
public:
    void SetFarmName(const char *farm);
    void GetFarmName(char *farm);
private:
    char m_strFarmName[32];
};

あるクラスを継承した派生クラスを作るには、派生クラスのクラス名の後に
「: public 基底クラス名」を記述します。
publicのところは、privateやprotectedも記述できますが、ほとんど見かけません(^^;)
おそらく、あまり使うべき場面がないからでしょう。難しくなりますし...

派生クラスのメンバは自分のクラスのメンバ + 基底クラスのとなります。
したがって、派生クラスには書いてないのですが、Vegetableクラスでは
SetPrice()とGetPrice()のメンバ関数を使うことができます(*^^)v
やりますな、継承...

また、派生クラスは、基底クラスからいくつでも作ることができます。
そして、派生クラスを継承して、さらに派生クラスを作るという使い方もできます。

Food クラス - Vegetable クラス - Pumpkin クラス
                 |
                 |_ Fruit クラス      -  Peach クラス
                 |            |_  Orange クラス
                 |                        |_  Banana クラス
                 |_ Meat クラス

//オレンジ、バナナ、とくれば、次はブドウ ロックシード... (*´Д`)




今日の名言
どんな不幸な人生からでも、利口者は何らかの利益を得る。一方、どんな幸福な
人生からでも愚か者は心を傷つけられる。
                                        ラ・ロシュフコー

繁栄は偉大な教師であるが、苦難はさらに偉大な教師である。富は心を豊かにする。
貧苦は心を鍛える。
                                        ウィリアム・ハズリット

敗北は骨を硬く鍛える。敗北は軟骨を筋肉に変える。敗北は人間を不敗にする。
                                   ヘンリー・ウォード・ビーチャー

敗北とは何か。それは教育にほかならない。それは一段と優れた段階に達するための
第一歩なのだ。
                                     ウェンデル・フィリップス

光の存在が物を見えるようにし、また見えなくもしている。けれどたとえこのうえなく気高い
創造物でさえ、暗黒と地上の影がなければ、いつまでも人の目にとまらない。
そして天空の星も見えなくなる。
                                     サー・トーマス・ブラウン