私有构造函数(某位大神的讲解)

来源:互联网 发布:大数据徐子沛在线阅读 编辑:程序博客网 时间:2024/05/18 02:32
#include <iostream>//构造函数私有class A{private:static int dog; //#1# 静态数据成员A(){ std::cout << "A类构造函数\n"; }public:static A* fun(){ return new A; } //static指出这是静态成员函数//该静态成员函数因为属于类的成员函数所以可以访问私有部分,创建一个 对象 返回其地址};A* S = A::fun();    //调用静态成员函数方法是 类名::函数名()//注意://1、静态成员函数不与对象关联,因此只能使用静态数据成员,非静态成员函数也可使用静态数据成员//2、静态函数无this指针,因此对象无法调用(成员函数是用this指针访问调用对象的数据的,隐式传递)//3、若静态成员函数在外部定义,不能使用关键字 static 只在声明时使用(或在类内声明)//静态数据成员(参加 “#1#”)即使私有,也可使用 如 A::dog访问和初始化、赋值//原因:静态数据成员 并未和类 的其他非静态数据成员放在一起,而是放在别处,和全局变量一样//而且即使创建多个类对象,只有一个静态数据成员,无副本//通常类所有的对象共享一组成员函数,也就说创建对象时,只需分配储存非静态的数据成员空间// 其他只有一个,无副本,(静态数据成员,静态成员函数,枚举常量)/*私有构造函数用途:常用与限定类的对象数量,例如 ostream类【对象有 cout ceer。。。】不能自定义对象你可以试试,编译器会报错,大概就是没有公有的构造函数或者构造函数私有无法访问限定方法:用一个静态数据成员限定 对象数量静态成员函数构建对象前,检测这个变量是否为0,不为0才创建下面有个例子*/class B{static int dog; //默认访问权限 privateB(){ std::cout << "构造B、\n"; }public:static B* fun();};int B::dog = 5;  //初始化 限定只能有 5个B的对象B* B::fun(){if (dog > 0)  //检测是否已到限定数量return new B;std::cout << "超出数量限制\n";return nullptr; //C++11空指针}


感谢大神的讲解