仮想関数

仮想関数を使うと派生元(基底クラス)がポインタなどで示されている場合にも派生先(継承先)のメンバが使えるようになります。(仮想関数で定義された関数のみ) 


■仮想関数の書式
virtual 関数名

仮想関数のサンプルです。

#include <iostream.h>
#include <stdio.h>

//「小銭入れクラス」
class kozeni_ire
{
 private:
  int money;
 public:
  kozeni_ire(int x){money=x;}
  int GetMonery(){return money;}
  virtual void Show();
};

void kozeni_ire::Show()
{
 cout<<"財布の小銭入れです。"<<endl;
 cout<<"現在所持している硬貨の枚数は500玉"<<money<<"個です。"<<endl;
}

//「小銭入れ」の派生クラスの「札束入れ」
class satutaba_ire:public kozeni_ire
{
 public:
  //コンストラクタ(kozeni_ireのコンストラクタに[x]を代入)
  satutaba_ire(int x):kozeni_ire(x){}
  //「小銭入れ」と同名のメンバ関数
  void Show();
};

void satutaba_ire::Show()
{
 cout<<"財布の札束入れです。"<<endl;
 cout<<"現在所持している札束の枚数は一万円冊"<<GetMonery()<<"枚です。"<<endl;
}

void main()
{
 kozeni_ire  A(10); //「小銭入れクラス」の実体
 satutaba_ire B(3); //「札束入れクラス」の実体
 kozeni_ire  *P;  //「小銭入れクラス」のポインタ ※ココがミソ

 //「小銭入れクラス」のアドレスをP(小銭入れクラスのポインタ)に渡す
 P=&A;
 P->Show();

 //「札束入れクラス」のアドレスをP(小銭入れクラスのポインタ)に渡す
 P=&B; 
 P->Show();

 getchar();
}

※メンバ関数Show()を仮想関数宣言(virtual)をしていないと下記のようになる。



※メンバ関数Show()を仮想関数宣言(virtual)をしている場合は下記のようになる。






C++の基礎のページへ



ホーム PV ランキング