C ++ /限制类的实例,其他类是从它继承的

时间:2012-05-03 12:51:37

标签: c++

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

含义:

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

class Fish: public Animal{
};

我想确保:

Fish* fish = new Fish();

是可能的,但是

Animal* ana = new Animal();

不会。

我该怎么做?

4 个答案:

答案 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方法是将构造函数标记为已删除。