私のアプリケーションでは、.csvファイルからデータを読み取る複数のリーダーがあります。私は今、それらのメソッドをgetData(std::string filename)
という共通点を持つ読者のための親クラスを作成して、それらを構造化したいと思います。私は基本クラスに仮想メソッドを実装することでそれをやりたかったのです。ファイル名はコンストラクタによって渡されるべきです。親クラスの仮想関数で子クラスのメソッドが呼び出されない
メイン
int main()
{
std::string filename = "file.csv";
ChildReader1 reader = new ChildReader1(filename);
}
ChildReader1.h
class ChildReader1: public ParentReader
{
public:
ChildReader1(std::string filename)
: ParentReader(filename)
{
};
void getData(std::string filename)
{
//get the data here
}
};
ParentReader.h
class ParentReader
{
public:
ParentReader() {};
ParentReader(std::string filename)
{
getData(filename);
};
~ParentReader() {};
virtual void getData(std::string filename) {};
};
現時点では、ファイル名がParentReaderに渡されたが、のgetData(ファイル名)は、仮想を開きますChildReader 1の実際のメソッドの代わりにParentReaderのメソッドを使用します。これをどのように解決できますか?
仮想メソッドは、ベース(親)クラスの構築中に呼び出されません。派生したものはまだ準備ができていないからです。 –
さて、基本クラスのサブクラスにあるメソッドをどのように呼び出すことができますか? –
子メソッドを呼び出す場合は、子オブジェクトを作成する必要があります。 – stark