同様の方法で何度も遭遇する問題があります。
例えば:
たとえば、データコンテナとして機能する一連の具象クラスのインターフェースとして機能する抽象基本クラスがあります。
class DataInterface
{
public:
DataInterface();
~DataInterface();
virtual void FetchData(void) = 0;
virtual void ProcessData(void) = 0;
virtual void ClearData(void) = 0;
}
具体的なクラスは次のようになります。
class BinaryData: public DataInterface
{
public:
BinaryData();
~ BinaryData();
virtual void FetchData(void);
virtual void ProcessData(void);
virtual void ClearData(void);
private:
bool m_boolData;
}
class IntegerData: public DataInterface
{
public:
IntegerData();
~ IntegerData();
virtual void FetchData(void);
virtual void ProcessData(void);
virtual void ClearData(void);
private:
int m_intData;
}
サブクラスは、DataInterface から継承したインターフェイスを実装します。ただし、データを保持するための属性が異なります。ここまでは順調ですね。
次のようにメイン関数でクラスを使用できます。
int main()
{
int IntegerData;
bool BoolData;
DataInterface *pData1 = new BinaryData();
DataInterface *pData2 = new IntegerData();
pData1->FetchData();
pData2->FetchData();
pData1->ProcessData();
pData2->ProcessData();
// now I want to get the data of pData1 and pData2, for example to write it into a file, show in visualization, ...
IntegerData = pData2->GetData() ????
BoolData = pData1->GetData() ????
}
問題は次のとおりです。
具体的なクラスからデータを取得するにはどうすればよいですか? 基本クラスのポインターしかないので、DataInterface で抽象ゲッター メソッドを定義する必要があります。ただし、getter メソッドのシグネチャはサブクラスごとに異なります。たとえば、あるときは整数を返す必要があり、あるときは bool 型を返す必要があります。
ヒントをください、この問題は私を夢中にさせます :/