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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KRNKRS
記事: 40
登録日時: 12年前
連絡を取る:

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

#1

投稿記事 by KRNKRS » 8年前

例えば、

コード:

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」を用いることは確定という前提で、継承先の関数を呼ぶ方法はございませんでしょうか。

KRNKRS
記事: 40
登録日時: 12年前
連絡を取る:

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

#2

投稿記事 by KRNKRS » 8年前

自己解決しました
こちらのサイトを基に書き直してみたところ無事解決できました
http://d.hatena.ne.jp/strkpy/20100401/1270133069

閉鎖

“C言語何でも質問掲示板” へ戻る