ハムスターに飼われる院生のブログ

自分用メモが中心のブログです。

オブジェクトポインタを使用してクラスを切り替える

OperationManagerを基本クラスとし、それに追加機能をつけるクラスAdditionalManagerを考える。
存在するクラスは以下の2つ。
・OperationManager
・AdditionalManager(これはOperationManagerを継承している)

この時両クラスには同名の関数virtual void func()があるとする。
どちらのクラスのfunc()を呼び出すかをシンプルに切り替える記述は以下の通り。

	bool Additional = true;
	OperationManager *op;
	if (Additional)
		op = new AdditionalManager();
	else op = new OperationManager();
	op->func();

これにより
Additonal=trueの時 AdditionalManagerのfunc()
Additonal=falseの時 OperationManagerのfunc()
が呼び出される

なお、virtual をつけないと基本クラス(今回だとOperationManager)しか呼び出されないことに注意。