ホームに戻る
 仮想関数

#include <iostream>

/*
*
*   仮想関数
*
*   仮想関数とは継承先が使用すると予想される関数を、
*   継承元で仮想的に定義しておくことである。
*
*   あらかじめ仮想的に定義しておくことで、
*   継承先の実体がおそらく実装するであろう関数に、
*   継承元のポインタでアクセスすることができます。
*
*   注意として、継承元では必ず仮想デストラクタを準備します。
*   これがないと継承先でデストラクタが呼ばれません。
*
*   また、コンストラクタやデストラクタからは、
*   仮想関数を呼んではいけないことにも注意が要ります。
*
*/

class A{
protected:
  int n;
public:
  virtual ~A(){};
  virtual void printNum() = 0;
};

class B : public A{
public:
  B(){n = 1;}
  virtual ~B(){};
  virtual void printNum(){std::cout << "b = " << n << std::endl;}
};

class C : public A{
public:
  C(){n = 2;}
  virtual ~C(){};
  virtual void printNum(){std::cout << "c = " << n << std::endl;}
};

using namespace std;

int main(){
  int i;
  A *a[2];

  a[0] = new B();
  a[1] = new C();

  for(i = 0; i < 2; i++){
    a[i]->printNum();
  }

  delete a[0];
  delete a[1];

  return 0;
}

 結果

b = 1
c = 2

inserted by FC2 system