0

これについてしばらくグーグルで調べましたが、明確な答えが見つからないようです。

次の例で unscramble() メソッドを呼び出すにはどうすればよいですか?

ありがとう。:^)

class Food {
public:
    Food(string _t):type(_t);
    virtual void eat() = 0;
private:
    string type;
}

class Fruit : public Food {
public:
    Fruit(string _t):Food(_t) {
    virtual void eat() { // Yummy.. }
}   

class Egg : public Food {
public:
    Egg(string _t):Food(_t)};
    virtual void eat() { // Delicious! };
    void unscramble();
}     

int main() {
    Food *ptr[2];
    ptr[0] = new Fruit("Apple");
    ptr[1] = new Egg("Brown");

    // Now, I want to call the unscramble() method on Egg.
    // Note that this method is unique to the Egg class.
    ptr[1]->unscramble();
    // ERROR: No member "unscramble" in Food

    cout << "\n\n";
    return 0;
}
4

2 に答える 2

6

卵であることが確実な場合:

static_cast<Egg*>(ptr[1])->unscramble();

卵かどうかわからない場合:

auto egg = dynamic_cast<Egg*>(ptr[1]);
if (egg != nullptr)
    egg->unscramble();
于 2016-04-04T19:47:56.647 に答える
1

dynamic_cast次の方法で使用できます。

auto e = dynamic_cast<Egg*>(ptr[1]);
if(e) e->unscramble();
于 2016-04-04T19:48:12.303 に答える