nan*_*nda 124
您可能需要私有构造函数的一些原因:
Ker*_*ido 93
通过提供私有构造函数,可以防止在除此类之外的任何位置创建类实例.有几种用例来提供这样的构造函数.
答:您的类实例是在static方法中创建的.static然后将该方法声明为public.
class MyClass()
{
private:
MyClass() { }
public:
static MyClass * CreateInstance() { return new MyClass(); }
};
Run Code Online (Sandbox Code Playgroud)
B.你的班级是单身人士.这意味着,程序中只存在一个类的实例.
class MyClass()
{
private:
MyClass() { }
public:
MyClass & Instance()
{
static MyClass * aGlobalInst = new MyClass();
return *aGlobalInst;
}
};
Run Code Online (Sandbox Code Playgroud)
C.(仅适用于即将推出的C++ 0x标准)您有几个构造函数.其中一些是宣布的public,其他的private.为了减少代码大小,公共构造函数"调用"私有构造函数,这些构造函数反过来完成所有工作.public因此,您的构造函数称为委托构造函数:
class MyClass
{
public:
MyClass() : MyClass(2010, 1, 1) { }
private:
MyClass(int theYear, int theMonth, int theDay) { /* do real work */ }
};
Run Code Online (Sandbox Code Playgroud)
D.您希望限制对象复制(例如,由于使用共享资源):
class MyClass
{
SharedResource * myResource;
private:
MyClass(const MyClass & theOriginal) { }
};
Run Code Online (Sandbox Code Playgroud)
E.你的班级是实用班级.这意味着,它只包含static成员.在这种情况下,不能在程序中创建任何对象实例.
Emi*_*ier 12
留下"后门",允许其他朋友类/功能以禁止用户的方式构造对象.想到的一个例子是构造迭代器(C++)的容器:
Iterator Container::begin() { return Iterator(this->beginPtr_); }
// Iterator(pointer_type p) constructor is private,
// and Container is a friend of Iterator.
Run Code Online (Sandbox Code Playgroud)
这对包含公共代码的构造函数非常有用; 私有构造函数可以被其他构造函数调用,使用'this(...);' 符号.通过在私有(或受保护的)构造函数中创建公共初始化代码,您还明确地明确表示仅在构造期间调用它,如果它只是一个方法则不是这样:
public class Point {
public Point() {
this(0,0); // call common constructor
}
private Point(int x,int y) {
m_x = x; m_y = y;
}
};
Run Code Online (Sandbox Code Playgroud)