C++でインターフェースを定義する

      2017/02/09

C++ にインターフェースは存在しません。
作成したい場合は抽象クラスで表現します。
以下が実装のサンプルになります。

インターフェース定義

全て仮想関数にし、各関数の末尾に= 0を追加します(pure-specifier構文)。これを純粋仮想関数と言います。
純粋仮想関数を含むクラスはインスタンス化できないので、継承して使用されることになり、結果、インターフェースの様に扱えます。
純粋仮想関数を含むクラスを抽象クラスといいます。

抽象クラスはオブジェクトの作成はできませんが、ポインタ型で参照は行えるため、派生クラスを知らなくてもアクセスできます。

実装クラス

インターフェース実装クラス定義
class 派生クラス名 : 継承修飾子 抽象クラス

継承修飾子はpublicにしないと、抽象クラスのポインタへ変換できないので注意。

使い方

IAnimalにデストラクタがないと、上記でdelete animalをしてもDogクラスのデストラクタがコールされません。
生成クラスを意識しないようにしたい場合は、必ずデストラクタを定義しておきましょう。
ちなみにIAnimalのデストラクタを純粋仮想関数で定義し、その中身を記述することも可能ですが、インターフェース風に扱うなら不要だと思います。

 - C言語/C++