1

基本クラスへのポインターの配列を作成できるようにする目的に役立つ抽象基本クラスがあります。(「多くのこと」に役立ちます...)

私の抽象基本クラスにはメンバー関数が含まれていません。したがって、純粋な仮想メソッドは存在しないため、技術的に抽象的ではないと思います。

ただし、このクラスのインスタンスを作成できるようにしたくありません。

メンバーなしの抽象基本クラスを作成することは可能ですか? そうでない場合、「抽象ベース」のインスタンスが作成されないようにする別の解決策はありますか? コンストラクタを作るだけでprotected十分ですか?

実際、そのクラスの目的が基本クラスへのポインターのベクトルまたは配列を作成できるようにすることである場合、抽象基本クラスは必要ないことが指摘されました-単純に基本クラスを持たず、継承階層の最上位にあるクラスを基本クラスとして使用します。または、その最上位クラスをコピーして貼り付け、実装されたメソッドを実装のない純粋な仮想関数に交換することもできますが、これは抽象ベース ポインターの考え方と論理的に矛盾しているように思われ、コードの保守がより困難になります。

4

3 に答える 3

1

そのクラスのインスタンスをポリモーフィックに削除する場合は、とにかく仮想デストラクタが必要です。基本クラスのインスタンス化を防ぐだけでなく、未定義の動作を回避する必要があります。純粋に仮想化するだけです。そして、空の実装を与えます (はい、これは C++ で機能します)。

ただし、ポリモーフィズムをまったく使用していない場合は、仮想デストラクタの追加を避け、代わりにコンストラクタを保護する必要があります。基底クラスは必ずしもポリモーフィックなクラス階層を確立する必要がないことに注意してください ( のような C++ ライブラリの例を参照してくださいstd::input_iterator_tag)。

于 2015-08-03T15:50:48.443 に答える