継承されたオブジェクトの一般的な方法を専門にする方法はあります:私は2つの特殊なオブジェクトを持って
class Parent
{
virtual void say(Food* obj) { std::cout << "The object is food" << std::endl; }
};
そして継承:次に
class Food {};
class Fruit : public Food {};
class Vegetable : public Food {};
私は継承される親クラスを持っています親からのクラス。
class Child : public Parent
{
virtual void say(Fruit* obj) { std::cout << "The object is a fruit" << std::endl; }
virtual void say(Vegetable* obj) { std::cout << "The object is a vegetable" << std::endl; }
};
私がやる:私はそれを印刷したい
std::vector<Food*> basket;
Fruit fruit = Fruit();
Vegetable vegetable = Vegetable();
basket.push_back(&fruit);
basket.push_back(&vegetable);
Child child = Child();
for (Food* food : basket)
{
child.say(food);
}
「オブジェクトは果物である」とし、「オブジェクトは、植物である」が、それは動作しません: 私を得ますエラーメッセージ:「Food *」から「Fruit *」への引数1の既知の変換はありません。
私はそれがオーバーヘッドの原因と聞いたので、可能であればtypeidを使用せずにこれを行う方法はありますか?ここでのコードは、オンラインエディタである:cpp.sh/27ekc
さまざまな食品は、多形的に印刷する必要があります。次に、あなたは 'say'関数でその関数を呼び出します。 – NathanOliver
現実世界では、子供は自分が食べていることを知っています。 OOPでは、食べ物は自分の名前を知っています。 – Arkadiy
私は、多型性がどのメソッドを呼び出すか把握することを期待するオーバーロードされたメソッドを呼び出すことができないという問題があると思います。 –