我有两个专门的对象继承对象的一般方法:有没有办法专门
class Food {};
class Fruit : public Food {};
class Vegetable : public Food {};
然后我将继承父类:
class Parent
{
virtual void say(Food* obj) { std::cout << "The object is food" << std::endl; }
};
而且继承来自父母的课程。
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);
}
我想它打印“的对象是一种水果”,然后“的对象是蔬菜”,但它不工作: 我得到错误消息:参数1从'Food *'到'Fruit *'没有已知的转换。
有没有办法做到这一点,如果可能的话,不使用typeid,因为我听到它会导致开销。这里是一个在线编辑器代码:cpp.sh/27ekc
不同的食物应该印刷自己多形态。然后你可以在'say'函数中调用该函数。 – NathanOliver
在现实世界中,孩子知道她在吃什么。在OOP中,食物知道自己的名字。 – Arkadiy
我认为问题在于,您无法调用期望多态的重载方法来确定要调用的方法。 –