4

私の理解では、C++ ライブラリの概念は C++ にとって、 Closeableのようなインターフェイスが Java にとってのものであるということです (リンクされたソースによると、概念は:名前付き要件のセット)。

  1. そのアナロジーは正しいですか?
  2. C++ インターフェイス(つまり、純粋な仮想メソッドを持つクラス) と C++ ライブラリの概念の違いは何ですか?
  3. 一般に、多重継承による C++ ライブラリの概念の実装は、(多重継承を持たない) Java で複数のインターフェイスを実装することと同等ですか?
4

2 に答える 2

2
  1. 正確な例えではありませんが、概念はインターフェイスに似ています。純粋仮想メンバー関数のみを持つクラスは、Java インターフェースによく似ています。Java ジェネリックは、おそらく C++ の概念に近いアナロジーですが、はるかに制限されています。それらを使用できるのは、特定の基本クラスまたはインターフェイスを継承する型を要求する場合のみです (私が間違っている可能性があります)。Haskell 型クラスは、C++ の概念に非常によく似ています。

  2. C++ インターフェイスはクラスです。インターフェイスを実装するとは、インターフェイスを継承し、純粋な仮想メンバー関数を実装することを意味します。コンセプトは要件のセットです。概念に準拠するとは、準拠クラスがすべての要件に準拠していることを意味します。特定の式の有効性 ( という名前のメンバー型エイリアスが必要iterator) または動作 (i++と同等でなければならない) の要件が存在する場合がありますIt ip=i; ++i; return ip;

    インターフェイスの継承は言語で定義できますし、定義する必要がありますが、概念を正式に指定するための言語サポートはまだありません。言語サポートが提案されていますが、現在の (C++14) 標準には含まれていません。

    継承は動的 (実行時) ポリモーフィズムですが、概念はテンプレートと組み合わせて使用​​されます。これは静的 (コンパイル時) ポリモーフィズムです。

  3. 同等ではありません。動的ポリモーフィズムと静的ポリモーフィズムはまったく異なるものです。

于 2016-01-19T11:14:13.360 に答える
0
  1. いいえ、違います。Java のインターフェイスは、C++ のインターフェイスと同じです (すべてのメソッドが仮想純粋であるクラス)。

  2. C++ の概念は、C++ インターフェイスがクラスの機能を定義するのではなく、クラスの機能を推測します。

  3. C++ の概念には、継承を扱うものは何もありません。コンセプトは、クラスがどのように実装されるべきかではなく、クラスができることを決定します。

于 2016-01-19T10:47:20.760 に答える