构造函数可以在C++中保密吗?

Abh*_*ain -2 c++

构造函数可以在C++中是私有的吗?如果是,那我们怎么称呼呢?

class Puma
{
    int a = 10;
    Puma()
    {
        cout << a;
    }
};

int main()
{
    Puma pum;
    return o;
}
Run Code Online (Sandbox Code Playgroud)

这个程序可以运行吗?如果没有那么我们如何调用Puma()构造函数,因为它是私有的?

Ben*_*ley 19

是的,构造函数可以是私有的.您可以使用成员函数(静态或非函数)或朋友函数来调用它.

class Puma
{
public:
    static Puma create(int a) { return Puma(a); }
private:
    int age;
    Puma(int a) :age(a) {}    

    friend Puma createPuma(int a);
};

Puma createPuma(int a) { return Puma(a); }
Run Code Online (Sandbox Code Playgroud)

有关可能的用例,请参阅Factory PatternNamed Constructor Idiom.


Ria*_*iaD 7

是.构造函数可能是私有的.

在这种情况下,您可以创建类

  • 使用另一个(公共)构造函数
  • 从同一个类调用构造函数
  • 从友元类/函数中调用构造函数