ホームに戻る
仮想関数
#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