純粋に仮想の抽象基本クラスである「インターフェイス」クラスを C++ で作成したいと考えています。
このインターフェイス クラスでコンストラクタを定義できますか? コンストラクターを純粋な仮想関数にすることはできませんが、インターフェイス クラスのコンストラクターを定義するにはどうすればよいでしょうか?
編集:そのようなインターフェイス クラスに仮想デストラクタが必要ですか?
実際には、1 つの質問に 2 つの質問があります。
コンストラクターを純粋な仮想関数にすることはできません
TL/DR: コンストラクターをインターフェースに追加しようとしている場合、それはもはやインターフェースではなく、1 つを持つことが完全に許可されている単純な抽象基本クラスです。
C++ にはインターフェイスの概念がありません。具象クラスと抽象クラスがありますが、それ以上のものはありません。抽象クラスは、コンストラクター、データ メンバー、およびその他すべてを持つことができます。クラス抽象をマークするために必要なのは、単一の純粋仮想メンバー関数だけです。
一部の人々は、「インターフェース」という言葉を使用して、データ メンバーや非純粋仮想メンバー関数を持たない抽象クラスを示します。他の人々は、わずかに異なる定義を使用しています。正確な定義は、言語に関する限り、まったく意味がありません。データメンバーを持ち、コンストラクターを定義しても、クラスをインターフェースと呼ぶことができます。誰もそれについて引用することはありません。または、この用語を完全に避けることもできます。