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