class Animal
{
public:
typedef enum{
CAT,
DOG,
RABBIT,
EAGLE,
FOX
} AnimalType;
static Animal* Create(AnimalType type);
~Animal();
virtual void PlayWith(Animal* other)=0;
virtual void Eat(Animal* other) = 0;
protected:
Animal();
};
有人告诉我,其中一行有编程错误,但我找不到微妙的错误。有人能搞清楚吗?
答案 0 :(得分:2)
您正在设计一个抽象基类,因此您将通过类型为Animal *的基类指针操作指向具体派生类(Cat *,Dog *,Rabbit *)实例的指针。 对于这种多态层次结构,您的基类析构函数必须始终是虚拟的。
virtual ~Animal();
答案 1 :(得分:0)
通常,基类的默认构造函数可以具有公共范围,也可以是私有的,如果您希望它被抑制的话。我认为没有理由为什么它应该具有 protected 范围。