抽象工厂类中的微妙设计错误

时间:2015-10-24 19:25:52

标签: c++

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();
};

有人告诉我,其中一行有编程错误,但我找不到微妙的错误。有人能搞清楚吗?

2 个答案:

答案 0 :(得分:2)

您正在设计一个抽象基类,因此您将通过类型为Animal *的基类指针操作指向具体派生类(Cat *,Dog *,Rabbit *)实例的指针。 对于这种多态层次结构,您的基类析构函数必须始终是虚拟的。

virtual ~Animal();

答案 1 :(得分:0)

通常,基类的默认构造函数可以具有公共范围,也可以是私有的,如果您希望它被抑制的话。我认为没有理由为什么它应该具有 protected 范围。