我有兩個專門的對象繼承對象的一般方法:有沒有辦法專門
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
我認爲問題在於,您無法調用期望多態的重載方法來確定要調用的方法。 –