这是我在设计接口(interface)时遇到的一个问题示例。
我有一类动物,并且从中衍生了猫,狗和狮子。现在,我有一个函数“feedFood”,该函数将基类Animal作为参数。根据动物的种类,我应该给动物喂不同的食物。
因此,如何在“feedFood”功能中检查动物的类型。
我可以想到3种方法
哪个是最佳方法,或者还有其他更好的方法吗?
最佳答案
您目前正在这样说:
void feedFood(Animal &);
Cat myCat;
Dog myDog;
feedFood(myCat);
feedFood(myDog);
// Problem: How does feedFood() know what's going on?
要使用多态性,请将Feed函数设为
Animal
的虚拟成员:struct Animal
{
virtual void feedFood() = 0; // pure virtual or default behaviour, up to you
virtual ~Animal() { } // always provide virtual destructor!
/* ... */
};
struct Cat : public Animal
{
void feedFood() { /* Cat implementation */ }
/* ... */
};
// Usage:
// via reference
void feed(Animal & a) { a.feedFood(); }
// via pointer
Animal * b = new Bat;
b->feedFood();