no-image

シンプルなファクトリ関数 【c++】

ファクトリ関数とは

サブクラス(子クラス)のオブジェクトを生成し、それを指し示すスーパークラス(親クラス)のポインタを返す関数のこと。

つまり、スーパークラスを強制的に返して、スーパークラスをベースにサブクラスに応じた振る舞いを行うこと(ポリモーフィズム)を意識させるための関数と言える。

Wikiのファクトリ関数は、ファクトリ関数に継承を使っているが、本記事では継承を使わないシンプルな形。

ロールプレイングゲームで「スライム」を動的に登場させたいときを考える。

スーパークラス「モンスター」を継承させると以下の通り。

move関数:モンスターの移動を表す

サブクラスに応じて振る舞いが異なっている。

26行目:ファクトリ関数

サブクラスであるスライムを動的に生成する関数。返すのはスーパークラスポインタ。

何がいいのか

サブクラスを動的に生成たいときに力を発揮する。

ファクトリ関数がない場合

ポリモーフィズムを意識して、

とスーパークラスで受け取るべきところを

 

のように左辺がサブクラスで受け取ってしまう可能性がある。

この場合、スーパークラスにはないサブクラス特有の変数や関数を使えてしまい、バグをもたらす可能性がでてしまう。

ファクトリ関数がある場合

動的に生成するとき、このファクトリ関数を使うような指示があれば、強制的にスーパークラスで返ってくるので、自然とポリモーフィズムを意識したソースコードにせざるを得なくなる。