次のような純粋仮想メソッドのみを持つクラスを作成することで、C ++ java / C#のようなインターフェイスを操作しようとしています:(これは単なる例です)
class IMyInterface
{
public:
virtual int someFunc() = 0;
virtual ~IMyInterface() {}
};
の配列内の2つの要素を交換するメソッドの実装に行き詰まるまでは、すべて問題ありません。コンパイラが実装しないIMyInterface
ことについて文句を言うため、C++ではインターフェイスをインスタンス化することが許可されていないためです。temp
someFunc()
void Exchange(IMyInterface* array, int i, int j)
{
IMyInterface temp = array[i]; // not allowed
array[i] = array[j];
array[j] = temp;
}
そのため、インターフェイスクラスの定義を変更し、純粋仮想関数を削除して、次のようなメソッドの「デフォルト」実装を提供する必要がありました。
class IMyInterface
{
public:
virtual int someFunc()
{
return 0;
}
virtual ~IMyInterface() {}
};
問題は、IMyInterface
もはやインターフェースではなく、それから継承するクラスが実装することを強制しないことsomeFunc()
です。
とにかくこれの周り?