ページ 11

抽象クラスについて

Posted: 2015年6月18日(木) 16:02
by hoge
C++の抽象クラスに関しての質問です。

抽象クラスから派生させた派生クラスで、で新しい関数を作りました
この時に、

コード:

base* base[2];

void main(void)
{
    base[0]=new hoge;
    base[1]=new hage;

    base[0]->baseMsd();    //baseの純粋仮想関数をhogeでオーバーライドされている。
    base[1]->hageta();      //hageクラスで新規に作ったメソッドを呼び出したい。
}
この時、hageta()は呼び出せないんですかね?

Re: 抽象クラスについて

Posted: 2015年6月18日(木) 16:03
by hoge
呼び出せないんですかね?って言い方は間違ってますね。
呼び出せないのは知ってるんですけど、こういうやり方で呼び出す方法ってありませんか?

Re: 抽象クラスについて

Posted: 2015年6月18日(木) 18:54
by みけCAT
素直にキャストすれば呼び出せましたが、これではダメなのですか?

コード:

#include <cstdio>
// C++では、main関数の戻り値はint型にしなければならない。
#define main dumny(){} int main

struct base {
    virtual void baseMsd() = 0;
};

struct hoge : public base {
    void baseMsd() {
        puts("hoge");
    }
};

struct hage : public base {
    void baseMsd() {
        puts("hage");
    }
    void hageta() {
        puts("hageta");
    }
};

base* base[2];

void main(void)
{
    base[0]=new hoge;
    base[1]=new hage;

    base[0]->baseMsd();    //baseの純粋仮想関数をhogeでオーバーライドされている。
    ((hage*)base[1])->hageta();      //hageクラスで新規に作ったメソッドを呼び出したい。
}
https://ideone.com/R1x0Kr

Re: 抽象クラスについて

Posted: 2015年6月19日(金) 02:55
by hoge
おおおお!
こんなやり方があったのですね!
有難う御座いました!