第27講 クラスの学習その2☆☆
第4話 クラスの継承

ここでは、Hitoクラスから、派生クラスGakuseiを作ってみます。
基底クラスから派生クラスを作ることをクラスを継承するといいます。
派生クラスのフィールドとメソッドが共通の場合は、
再度、フィールドを宣言したり、メソッドを定義したりする必要はありません。
基底クラスを変更する部分と基底クラスに追加する部分だけを記述すればよいのです。

基底クラスHitoには、フィールドとして名前、年齢、HP(体力)、MP(魔力)が宣言され、
メソッドとして食事void taberu()と休暇void suimin()があります。
食事をするとHPが回復し、休暇を取るとMPが回復します。
派生クラスGakuseiにおいても
食事をするとHPが回復し、休暇を取るとMPが回復しますが学生なので回復幅が大きくなっています。
また、Gakuseiクラスには、勉強void benkyou()というメソッドがあります。
なので、フィールドして学力gakuryokuが宣言されています。

尚、コンストラクタなどの関数の引数の代入として、前話では
Hito(char* name,int age,int hp,int mp){
  this->name=name;
  this->age=age;
  this->hp=hp;
  this->mp=mp;
}
としていましたが、同じ内容を
Hito(char* name,int age,int hp,int mp):name(name),age(age),hp(hp),mp(mp){}
とすることも出来ます。今回はそれで記述しています。



派生クラスを作るには
class クラス名 : public 基底クラス名
{
 追加の宣言
 変更のメソッド
 追加のメソッド
}
とします。

#include<iostream>
using namespace std;

class Hito{
public:
  char* name;
  int age,hp,mp;
  Hito(char* name,int age,int hp,int mp):name(name),age(age),hp(hp),mp(mp){}
  void taberu(){hp+=3;} //食べることによって体力が回復する。
  void suimin(){mp+=4;} //休暇を取ることによって魔力が回復する。

};

class Gakusei :public Hito{
public:
  int gakuryoku; //追加部分
  Gakusei(char* name,int age,int hp,int mp,int gakuryoku):Hito(name,age,hp,mp),gakuryoku(gakuryoku){}
  void taberu(){hp+=5;} //基底クラスを変更する部分 学生なので回復が大きい。
  void suimin(){mp+=6;} //基底クラスを変更する部分 学生なので回復が大きい。
  void benkyou(){gakuryoku+=5;} //基底クラスを追加する部分 勉強すると学力が伸びる。
};
void main(){
  Hito taro("太郎",25,30,35);
  cout<<"名前:"<<taro.name<<" 年齢"<<taro.age<<" HP:"<<taro.hp<<" MP:"<<taro.mp<<endl;
  taro.taberu();
  taro.suimin();
  cout<<"太郎は、食事をして睡眠をとったのでHPとMPが回復した。"<<endl;
  cout<<"名前:"<<taro.name<<" 年齢"<<taro.age<<" HP:"<<taro.hp<<" MP:"<<taro.mp<<endl;


  cout<<endl;
  Gakusei hanako("花子",15,11,15,20);
  cout<<"名前:"<<hanako.name<<" 年齢"<<hanako.age<<" HP:"<<hanako.hp<<" MP:"<<hanako.mp<<" 学力:"<<hanako.gakuryoku<<endl;
  hanako.taberu();
  hanako.suimin();
  hanako.benkyou();
  cout<<"花子は、食事をして勉強してから睡眠をとったので、HPとMPが回復し学力が伸びた。"<<endl;
  cout<<"名前:"<<hanako.name<<" 年齢"<<hanako.age<<" HP:"<<hanako.hp<<" MP:"<<hanako.mp<<" 学力:"<<hanako.gakuryoku<<endl;
}
実行画面例

では皆さん、さらに弱い敵との戦いvoid tatakau()、強い敵との戦いvoid sentou()を加えましょう。
弱い敵との戦いではHPとMPを少々消耗いします。
強い敵との戦いでは、HPとMPをかなり消耗します。
派生クラスGakuseiでは基底クラスより消耗の度合いは小とします。

また、基底クラスに年をとるvoid tositoru()を入れましょう。
年齢が上がると、HPとMPが増えます。
また、派生クラスには進級void sinkyuu()を加えてください。
void sinkyuu()は、void tositoru()より学力・HP・MPの増え方を大きくしてください。
実行結果



第3話へ 第5話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座