如何让一个类不能实例化?

在C++中,如果你希望一个类不能被实例化,也就是不能创建该类的对象,你可以通过以下两种方式来实现:

  1. 声明类的构造函数为protected或private: 如果一个类的构造函数被声明为protected或private,那么在类的外部就不能直接调用这个构造函数来创建类的对象。只有类本身和它的友元函数或类可以访问它的私有或保护成员。
class NonInstantiable1 {
private:
    NonInstantiable1() {} // private constructor
};
  1. 将类声明为抽象基类(Abstract Base Class, ABC): 如果一个类至少有一个纯虚函数,那么这个类就是抽象基类,无法被实例化。纯虚函数是在基类中声明但不定义的虚函数,它在基类中的声明形式如下:virtual void func() = 0;。纯虚函数使得派生类必须提供自己的实现,否则派生类也将成为抽象基类。
class NonInstantiable2 {
public:
    virtual void func() = 0; // pure virtual function
};

上述两种方式都可以让一个类不能直接实例化,但是可以作为基类被继承。在派生类中,你可以提供构造函数的实现或者实现基类中的纯虚函数,使得派生类可以被实例化。

发表评论

后才能评论