static【2】

那我们今天就简单的说一下(1、)静态(成员)对象,(2、)静态类和(3、)单实例化类

首先就是我们的静态对象

那么它(1.1)是什么呢?(1.2)怎么用呢?

1.1、静态成员对象:静态成员对象存储在全局存储区,静态成员对象的作用域在类的作用域中。其可以避免与其他类成员或全局对象名字冲突。可以封装为私有的,而全局对象不可以。

1.2、

//简单创建一个类
class MyClass
{
};

int main()
{
	//在创建对象的时候加上静态关键字static
	static MyClass mc;

	system("pause");
	return 0;
}

其次就是我们的静态类

那么它(2.1)是什么呢?(2.2)怎么用呢?

1.1、静态类是指只用于包含静态成员的类型,不能进行实例化。

1.2、

//简单创建一个静态类
//加上关键字static
//(注意里面的数据成员和成员函数都要加上关键字static)
static class MyClass
{
public:
	static int getData(){ return a; }

private:
	static int a;
};

最后就是单实例化类

那么它(3.1)是什么呢?(3.2)怎么用呢?

这么讲,你打游戏有没有说是最大的一个boss在同一时间出现两次?

答案肯定是没有,那我们就来看看这是如何实现的:

static class MyClass
{
public:
	~MyClass();
	static MyClass* getInstance();	//instance是示例的意思

private:
	static MyClass* pInstance;		//我来解释一下这里为什么要使用指针:因为可以少调用一次构造函数不能返回战区的指针,加上static(如果使用普通的数据成员就的有对象才能这么使用)
	MyClass();

};
//示例指针在类外赋空,因为是全局变量
MyClass* MyClass::pInstance = nullptr;
//获取示例的函数
MyClass* MyClass::getInstance()
{
	if (pInstance == nullptr)
	{
		pInstance = new MyClass;
		return pInstance;
	}
}
//构造函数
MyClass::MyClass()
{
}
//析构函数进项指针的释放
MyClass::~MyClass()
{
	delete pInstance;
	pInstance = nullptr;
}

int main()
{
	//MyClass mc;	//1.1、这时我们发现这个类已经创建不了对象了
	//1.2、那我们就想办法让他只创建一个对象
	MyClass* p1 = MyClass::getInstance();
	cout << hex << "p1: 0X-" << p1 << endl;
	MyClass* p2 = MyClass::getInstance();
	cout << hex << "p2: 0X-" << p2 << endl;
	//进行控制台的内存地址的输出,显示的是相同的内存,这就说明我们已经成功了,现在创建的对象就只能是一个了,因为内存是相同的

	system("pause");
	return 0;
}

相同的地址:

好了,分享到此结束,希望有错误的地方,法老们可以指导一下,给点学习的意见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值