抽象クラスについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hoge

抽象クラスについて

#1

投稿記事 by hoge » 10年前

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()は呼び出せないんですかね?

hoge

Re: 抽象クラスについて

#2

投稿記事 by hoge » 10年前

呼び出せないんですかね?って言い方は間違ってますね。
呼び出せないのは知ってるんですけど、こういうやり方で呼び出す方法ってありませんか?

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 抽象クラスについて

#3

投稿記事 by みけCAT » 10年前

素直にキャストすれば呼び出せましたが、これではダメなのですか?

コード:

#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
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

hoge

Re: 抽象クラスについて

#4

投稿記事 by hoge » 10年前

おおおお!
こんなやり方があったのですね!
有難う御座いました!

閉鎖

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