我想用 C++ 创建一个类,其他类从它继承。但是我想确保没有人能够从这个类中创建一个实例。
意义:
class Animal{
public:
virtual ~Animal() {}
};
class Fish: public Animal{
};
我想确保:
Fish* fish = new Fish();
有可能,但是
Animal* ana = new Animal();
不会。
我该怎么做?
我想用 C++ 创建一个类,其他类从它继承。但是我想确保没有人能够从这个类中创建一个实例。
意义:
class Animal{
public:
virtual ~Animal() {}
};
class Fish: public Animal{
};
我想确保:
Fish* fish = new Fish();
有可能,但是
Animal* ana = new Animal();
不会。
我该怎么做?
最简单的解决方案是 makeAnimal
的构造函数受保护:
Class Animal{
protected:
Animal() {}
public:
virtual ~Animal() {}
};
由于 C++ 不提供对抽象类的显式支持,但您可以将纯虚函数添加到您的类中以获得类似的效果。如果您没有合适的虚函数来制作纯虚函数,则常见的做法是使您的析构函数纯虚函数,然后在标头之外提供一个实现。
Class Animal{
protected:
Animal() {}
public:
virtual ~Animal() = 0;
};
Animal::~Animal() {
// destructor code
}
制作抽象类的惯用语是拥有一个纯虚析构函数:
struct A
{
A();
virtual ~A() = 0;
};
请注意,您必须为析构函数提供一个实现,即使它被标记为纯:
A::~A()
{
}
使其成为一个抽象类
旧的方法是使 Animal 的构造函数受保护。
C++11 的方式是将构造函数标记为已删除。