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

#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; //默认访问权限 private
	B(){ 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空指针
}


感谢大神的讲解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值