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;
}

相同的地址:

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

你可能感兴趣的:(c++,开发语言,后端)