同一个类中的类的静态成员对象

Luv*_*Luv 6 c++ static constructor

假设我们有一个班级

class Egg
{
    static Egg e;
    int i;
    Egg(int ii):i(ii) {}
    Egg(const Egg &);    //Prevents copy-constructor to be called
  public:
    static Egg* instance() {return &e}
};

Egg Egg::e(47);
Run Code Online (Sandbox Code Playgroud)

此代码保证我们不能创建任何对象,但只能使用静态对象.但是我们如何在类中声明同一个类的静态对象.

还有一件事因为e是静态对象,静态对象只能调用静态成员函数,所以如何在静态对象e中调用构造函数,其构造函数也是私有的.

Flo*_*ade 7

但是我们如何在类中声明同一个类的静态对象.

static成员变量没有存储类的每个对象的内部.因此,如果你声明一个static成员变量在类中或作为命名空间级别的对象所定义的后级,不同之处仅在相对于访问(Class::varvar),并获得protectedprivate成员.

还有一件事e是静态对象,静态对象只能调用静态成员函数

我认为你正在混合static功能和static对象.在static函数内部,您只能调用static函数(除非您在对象上调用它们).

那么如何在这里为静态对象调用构造函数 e

与每个其他对象一样,也必须为static对象调用构造函数.

它的构造函数也是私有的

在C++的类级别上检查访问控制.因此,由于static对象在类中,因此可以访问private成员.

与其他一些语言不同,以下内容在C++中是合法的,因为对私有成员的访问来自类内部 - 即使在另一个对象上(other在本例中):

 class Test {
 private:
      int i;
 public:
      Test(const Test &other)
      : i(other.i)
      {}
 };
Run Code Online (Sandbox Code Playgroud)