11.3.4 延伸:构造函数能否为private型
前面讲了构造函数可以为public型,也可以为protected型,但构造函数是否可以是private型呢?答案是肯定的。
此时,尽管不能直接在外部函数和派生类中使用“类名+对象名”的形式来创建该类对象,但可以通过类的static函数成员来创建类的实例,如代码11.9所示。
代码11.9 private型构造函数PrivateConstructor
<————————————-文件名:example1109.cpp——————————————> 01 #include<iostream> 02 using namespace std; 03 class Example//类定义 04 { 05 private: 06 int x; 07 Example(int xp)//类的构造函数定义为private型 08 { 09 x=xp; 10 } 11 public: 12 static Example*CreateObject(int xp)//static函数,不用创建对象便可调用 13 { 14 return new Example(xp);//申请动态内存 15 } 16 static void DeleteObject(Example*pE)//static函数,不用创建对象便可调用 17 { 18 delete pE;//释放申请到的内存资源 19 } 20 void disp()//成员函数 21 { 22 cout<<"x is"<<x<<endl; 23 } 24 }; 25 int main() 26 { 27 Example*pExample=Example:CreateObject(5); 28 //使用类名访问static函数创建对象,返回指向动态内存的指针 29 pExample->disp();//功能访问 30 Example:DeleteObject(pExample);//释放资源 31 return 0; 32 }
输出结果如下所示。
x is 5
【代码解析】代码演示了private构造函数的用法,正因为无法创建对象,所以,代码第12行,必须使用static成员函数来创建实例。通过对上述代码的分析可知,static函数同样可以应用在protected型构造函数中。