まずは以下のプログラムを見てください.
言語はC++です.
#include <iostream>
#include <string>
#include <list>
class TestObj
{
public:
virtual void Print()=0;
virtual ~TestObj(){};
};
class TestObj2 : public TestObj
{
private:
std::string p;
public:
void Print()
{
std::cout << p << std::endl;
}
inline void SetString(std::string st){ p = st;}
};
int main(void)
{
std::list<TestObj*> to;
to.push_back(new TestObj2());
to.push_back(new TestObj2());
for(std::list<TestObj*>::iterator it = to.begin(); it != to.end(); it++)
{
((TestObj2*)to)->SetString("aaa");
(*to)->Print();
}
return 0;
}
※コンパイルエラーが出ます上のプログラムはまずTestObjクラスで出力する純粋仮想関数Print()を定義
TestObj2ではTestObjを継承し,Print()の中身を実装.
このときTestObj2のprivate変数stringにSetStringで文字列を代入するというものです.
main関数ではTestObj*型のlistを宣言し,文字列をセットしていき,出力するというプログラムです.
ただ,普通にイテレータを使うとTestObj型なのでSetStringが使えず,上のようにキャストしてみましたがうまくいきませんでした.
どのようにすればうまくいくでしょうか.
よろしくお願いします