「Node」と呼ばれる空の基本クラスを作成し、「DecisionNode」や「Leaf」など、これから派生した他のクラスを作成したいと考えています。これを行うのは理にかなっており、ポリモーフィズムを利用して、コンパイル時に何がメソッドに渡されるかを知らなくても、これらのさまざまな種類のノードをメソッドに渡すことができますが、各派生クラスは状態やメソッドを共有しません。
基本クラスに追加の純粋仮想メソッドを作成せずにこれを実装する最良の方法は、混乱を招くため、コンストラクターを純粋仮想にすることであると考えました。したがって、クラス「Node.h」のヘッダー ファイルに次のように記述しました。
class Node {
private:
virtual Node();
};
そして「Node.cpp」で私は書いた:
#include "Node.h"
virtual Node::Node() = 0;
この実装では、Node が別のクラスによってインスタンス化されるのを防ぎます。これは、唯一のコンストラクターがプライベートであり、純粋な仮想指定子を使用してクラスが抽象であることを示すためです。ただし、これによりコンパイラエラーが発生します。
Node.h:6:21: error: return type specification for constructor invalid
Node.h:6:21: error: constructors cannot be declared virtual [-fpermissive]
私の質問は: 空の抽象基本クラスを作成するきちんとした方法はありますか?