1

我想用 C++ 创建一个类,其他类从它继承。但是我想确保没有人能够从这个类中创建一个实例。

意义:

class Animal{
public:
virtual ~Animal() {}
};

class Fish: public Animal{
};

我想确保:

Fish* fish = new Fish();

有可能,但是

Animal* ana = new Animal();

不会。

我该怎么做?

4

4 回答 4

2

最简单的解决方案是 makeAnimal的构造函数受保护:

Class Animal{
protected:
    Animal() {}
public:
    virtual ~Animal() {}
};

由于 C++ 不提供对抽象类的显式支持,但您可以将纯虚函数添加到您的类中以获得类似的效果。如果您没有合适的虚函数来制作纯虚函数,则常见的做法是使您的析构函数纯虚函数,然后在标头之外提供一个实现。

Class Animal{
protected:
    Animal() {}
public:
    virtual ~Animal() = 0;
};

Animal::~Animal() {
    // destructor code
}
于 2012-05-03T12:54:11.690 回答
2

制作抽象类的惯用语是拥有一个纯虚析构函数:

struct A
{
   A();
   virtual ~A() = 0;
};

请注意,您必须为析构函数提供一个实现,即使它被标记为纯:

A::~A()
{
}
于 2012-05-03T12:58:00.333 回答
0

使其成为一个抽象类

于 2012-05-03T12:54:11.347 回答
0

旧的方法是使 Animal 的构造函数受保护。

C++11 的方式是将构造函数标记为已删除。

于 2012-05-03T12:54:18.727 回答