正確な例えではありませんが、概念はインターフェイスに似ています。純粋仮想メンバー関数のみを持つクラスは、Java インターフェースによく似ています。Java ジェネリックは、おそらく C++ の概念に近いアナロジーですが、はるかに制限されています。それらを使用できるのは、特定の基本クラスまたはインターフェイスを継承する型を要求する場合のみです (私が間違っている可能性があります)。Haskell 型クラスは、C++ の概念に非常によく似ています。
C++ インターフェイスはクラスです。インターフェイスを実装するとは、インターフェイスを継承し、純粋な仮想メンバー関数を実装することを意味します。コンセプトは要件のセットです。概念に準拠するとは、準拠クラスがすべての要件に準拠していることを意味します。特定の式の有効性 ( という名前のメンバー型エイリアスが必要iterator
) または動作 (i++
と同等でなければならない) の要件が存在する場合がありますIt ip=i; ++i; return ip;
。
インターフェイスの継承は言語で定義できますし、定義する必要がありますが、概念を正式に指定するための言語サポートはまだありません。言語サポートが提案されていますが、現在の (C++14) 標準には含まれていません。
継承は動的 (実行時) ポリモーフィズムですが、概念はテンプレートと組み合わせて使用されます。これは静的 (コンパイル時) ポリモーフィズムです。
同等ではありません。動的ポリモーフィズムと静的ポリモーフィズムはまったく異なるものです。
于 2016-01-19T11:14:13.360 に答える