C++ 中的构造函数可以是私有的吗?如果是,那我们怎么称呼它?
class Puma
{
int a = 10;
Puma()
{
cout << a;
}
};
int main()
{
Puma pum;
return o;
}
这个程序可以运行吗?如果不是,那么我们如何调用Puma()
构造函数,因为它是私有的?
C++ 中的构造函数可以是私有的吗?如果是,那我们怎么称呼它?
class Puma
{
int a = 10;
Puma()
{
cout << a;
}
};
int main()
{
Puma pum;
return o;
}
这个程序可以运行吗?如果不是,那么我们如何调用Puma()
构造函数,因为它是私有的?
是的。构造函数可能是私有的。
在这种情况下,您可以创建类
在您的代码中,程序无法运行,因为您定义了一个构造函数并且它是私有的。因此,在您当前的代码中,无法创建类的对象,从而使类在某种意义上无用。
一种方法是您可以提供公共静态函数,这些静态函数调用私有构造函数来创建类的对象。
一件小事:
return o;
应该
return 0;
是的,构造函数可以是私有的。它在由静态成员函数(或朋友)调用时很有用,例如
class Even {
/// in practice, some more C++ code is probably needed
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);
然而,请注意 C++的五法则,并阅读一本好的C++ 编程书籍以及 C++ 编译器(例如GCC或Clang)和调试器(例如GDB)的文档。您甚至可能想要使用Clang 静态分析器。
单例可以有一个私有构造函数,该构造函数将从类的静态方法中调用。