0
これはしばらくGoogleで検索されていましたが、明確な答えが見つからないようです。基本クラスへのポインタの配列:ユニークな派生クラスのメソッドを呼び出す方法
次の例で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;
}
もし 'Derived'が必要な場合は、ポインタtそれは 'Derived *'の中で 'Base *'から 'Derived 'を回復できますが、あなたは*するべきではありません。あなたがそのようなことが必要な状況におかれたら、あなたのデザインに疑問を呈してください。 –