构造函数可以在C ++中是私有的吗?如果是,那我们怎么称呼呢?
class Puma
{
int a = 10;
Puma()
{
cout << a;
}
};
int main()
{
Puma pum;
return o;
}
这个程序可以运行吗?如果没有,那么我们如何调用Puma()
构造函数,因为它是私有的?
答案 0 :(得分:18)
是的,构造函数可以是私有的。您可以使用成员函数(静态或非函数)或朋友函数来调用它。
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); }
有关可能的用例,请参阅Factory Pattern或Named Constructor Idiom。
答案 1 :(得分:7)
是。构造函数可能是私有的。
在这种情况下,您可以创建类
答案 2 :(得分:3)
在您的代码中,程序无法运行,因为您已经定义了构造函数并且它是私有的。因此,在您当前的代码中,无法创建类的对象,从而使类在某种意义上无用。
一种方法是可以提供公共静态函数,这些静态函数调用私有构造函数来创建类的对象。
一件小事:
return o;
应该是
return 0;
答案 3 :(得分:1)
Singleton可以有一个私有构造函数,它将从类的静态方法中调用。
答案 4 :(得分:1)
是的,构造函数可以是私有的。当静态成员函数(或朋友)调用时,它很有用,例如
class Even {
private:
int x;
Even(int a) : x(a) {};
public:
int get () const { return 2*x; };
static EVen* make(int y) { return new Even(y); };
};
这个例子不太现实,但你明白了。在使用代码中,执行
Even* e = Even::make(3);