1

純粋に仮想の抽象基本クラスである「インターフェイス」クラスを C++ で作成したいと考えています。

このインターフェイス クラスでコンストラクタを定義できますか? コンストラクターを純粋な仮想関数にすることはできませんが、インターフェイス クラスのコンストラクターを定義するにはどうすればよいでしょうか?

編集:そのようなインターフェイス クラスに仮想デストラクタが必要ですか?

4

2 に答える 2

3

実際には、1 つの質問に 2 つの質問があります。

  • ABC に俳優を配置できますか? :もちろんできます!プライベート データを持ち、具象メソッドが 1 つしかないほぼ完全なクラスがあるとします。このメソッドは、クラスを抽象化する純粋仮想にする必要がありますが、それでもクラス データを ctor で初期化する必要があります。ポール・ルーニーが提案した質問はその例です
  • インターフェースは ctor を持つことができますか? : いいえ、定義上できません。インターフェイスは、純粋仮想メソッドのみを含む特別な ABC です。部分的なものでさえも実装されていないため、ctor は必要ありません。そして、あなたはすでにそれを指摘しました

コンストラクターを純粋な仮想関数にすることはできません

TL/DR: コンストラクターをインターフェースに追加しようとしている場合、それはもはやインターフェースではなく、1 つを持つことが完全に許可されている単純な抽象基本クラスです。

于 2016-01-28T08:16:19.567 に答える
0

C++ にはインターフェイスの概念がありません。具象クラスと抽象クラスがありますが、それ以上のものはありません。抽象クラスは、コンストラクター、データ メンバー、およびその他すべてを持つことができます。クラス抽象をマークするために必要なのは、単一の純粋仮想メンバー関数だけです。

一部の人々は、「インターフェース」という言葉を使用して、データ メンバーや非純粋仮想メンバー関数を持たない抽象クラスを示します。他の人々は、わずかに異なる定義を使用しています。正確な定義は、言語に関する限り、まったく意味がありません。データメンバーを持ち、コンストラクターを定義しても、クラスをインターフェースと呼ぶことができます。誰もそれについて引用することはありません。または、この用語を完全に避けることもできます。

于 2016-01-28T08:25:55.577 に答える