####前提
C++を勉強中の初心者です。
仮装関数としてhoge()をメンバにもつBaseクラスを定義し、そこから以下のようにさまざまな派生クラスを作りました。
C++
1class Base{ 2 public: 3 virtual void hoge(){} 4}; 5class Derived1 : public Base{ 6 void hoge(){ 7 //計算1 8 } 9}; 10class Derived2 : public Base{ 11 void hoge(){ 12 //計算2 13 } 14};
####実装したいこと
派生クラスのインスタンスがごちゃ混ぜになっているリストを定義して、順番にhoge()を実行したい
####試したこと
std::vector<Base>に派生クラスを並べて、以下のように順に呼び出すと、(当然だと思いますが)基底クラスのhoge()が呼ばれ、期待した計算をしません。
C++
1 Derived1 a1, a2, a3; 2 Derived2 b1, b2; 3 std::vector<Base> ba; 4 5 ba.push_back(a1); 6 ba.push_back(b1); 7 ba.push_back(a2); 8 ba.push_back(b2); 9 ba.push_back(a3); 10 for(int i=0;i<5;++i){ 11 ba[i].hoge(); 12 }
ダイナミックキャストをしようかと思いましたが、ダウンキャストは危険と言われています。
次のインスタンスへのポインタをメンバ変数に持たせようかと思いましたが、「順に呼び出す」計算とクラス定義自体があまり関係ないので、できたら分離出来たらいいなと考えています。
####質問内容
以上のことをどう実装すれば解決できるか、お知恵を貸してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/07 04:29