ページ 11

std::list<基底クラス> で継承先クラスの関数を呼びたい

Posted: 2017年2月09日(木) 03:22
by KRNKRS
例えば、

コード:

class HogeBase
{
    //コンストラクタとか略
    //virtual とかもとりあえず略
    void Draw();
}
という基底クラスがあり、

コード:

class Hoge1:HogeBase
{
    //コンストラクタとか略
    //virtual とかもとりあえず略
    void Draw();
}

class Hoge2:HogeBase
{
    //コンストラクタとか略
    //virtual とかもとりあえず略
    void Draw();
}
というHogeBaseを継承したHoge1,2というクラスがあるとして、

コード:

std::list<HogeBase> list;
Hoge1 hoge1;
Hoge2 hoge2;
list.push_back(hoge1);
list.push_back(hoge2);
for (HogeBase hoge : list)
{
    hoge.Draw();
}
として、各継承先のクラスのDraw関数を呼び出したい(現在そうしなければならない事態)のですが、HogeBase側の関数が呼ばれてしまいます(HogeBase型なので当たり前といえば当たり前なのですが...)。
Baseクラスで変数定義も行わなければならないという事態ですのでインターフェースも使用できません。
virtualとかoverrideも試してみたのですがやはりHogeBase側の関数が呼ばれてしまいます。

「std::list<HogeBase> list」を用いることは確定という前提で、継承先の関数を呼ぶ方法はございませんでしょうか。

Re: std::list<基底クラス> で継承先クラスの関数を呼びたい

Posted: 2017年2月09日(木) 04:17
by KRNKRS
自己解決しました
こちらのサイトを基に書き直してみたところ無事解決できました
http://d.hatena.ne.jp/strkpy/20100401/1270133069