抽象クラスでの動作
Posted: 2009年12月04日(金) 16:43
どなたか回答をお願いします.
まずは以下のプログラムを見てください.
言語はC++です.
上のプログラムはまずTestObjクラスで出力する純粋仮想関数Print()を定義
TestObj2ではTestObjを継承し,Print()の中身を実装.
このときTestObj2のprivate変数stringにSetStringで文字列を代入するというものです.
main関数ではTestObj*型のlistを宣言し,文字列をセットしていき,出力するというプログラムです.
ただ,普通にイテレータを使うとTestObj型なのでSetStringが使えず,上のようにキャストしてみましたがうまくいきませんでした.
どのようにすればうまくいくでしょうか.
よろしくお願いします
まずは以下のプログラムを見てください.
言語は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が使えず,上のようにキャストしてみましたがうまくいきませんでした.
どのようにすればうまくいくでしょうか.
よろしくお願いします