本文摘自:http://hi.baidu.com/mythmgn/blog/item/d395180202f7cc0b4bfb51a6.html
类的构造函数一般是public的,但是也可以是private的。构造函数为私有的类有这样的特点:
<1>不能实例化:因为实例化时类外部无法访问其内部的私有的构造函数;
<2>不能继承:同<1>;
所以它可以控制用户实例化一个类对象。
实例化的这样的类的方法是在类中定义一个static方法或者一个友元,专门负责实例化工作。Java中的工厂方法常常采用这点。
下面给出一个例子:
#include "stdafx.h"
#include<iostream>
using namespace std;
class WonderfulClass
{
public:
static WonderfulClass* makeAnObject()
{
// 创建一个WonderfulClass对象并返回其指针
return (new WonderfulClass);
}
private:
WonderfulClass(){cout<<"私有构造函数。"<<endl; }
friend WonderfulClass* Visitconstuctor();
};
WonderfulClass* Visitconstuctor()
{
return (new WonderfulClass);
}
int _tmain(int argc, _TCHAR* argv[])
{
WonderfulClass *p = WonderfulClass::makeAnObject();
// ... 使用*p
delete p; // Not neccesary here, but it's a good habit.
WonderfulClass *q = Visitconstuctor();
delete q;
cout<<endl;
system("pause");
return 0;
}