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

subtle design error in abstract factory class

本文关键字:错误 工厂 抽象      更新时间:2023-10-16
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();
};

我被告知其中一行有编程错误,但我找不到细微的错误。有人能弄明白吗?

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

virtual ~Animal();

通常,基类的默认构造函数要么具有公共作用域,要么具有私有作用域(如果您希望它被抑制的话)。我不明白为什么它应该有受保护的作用域。