那我们今天就简单的说一下(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;
}
相同的地址:
好了,分享到此结束,希望有错误的地方,法老们可以指导一下,给点学习的意见