这是我在设计界面时遇到的问题的一个例子.
我有一个动物类,我从中获得了猫,狗和狮子.现在我有一个函数'feedFood',它接受基类Animal作为参数.根据动物的类型,我应该给动物喂食不同的食物.
那么如何在'feedFood'功能中检查动物的类型.
我能想到3种方法
哪种方法最好,还是有其他更好的方法?
你现在这样说:
void feedFood(Animal &);
Cat myCat;
Dog myDog;
feedFood(myCat);
feedFood(myDog);
// Problem: How does feedFood() know what's going on?
Run Code Online (Sandbox Code Playgroud)
要使用多态,请将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();
Run Code Online (Sandbox Code Playgroud)