静态变量:是属于整个类的,而不是属于一个对象的,可以在外部直接访问
他是所有对象共享的,只开辟一个空间,不会复制多份,操作的同一个数,不会因为其处于private而受到影响
静态成员变量在数据区上,而普通对象开辟内存在栈上
int class::mcount; 这时在data段的BSS段自动初始化为0,必须在类外初始化定义
初始化:int Object::val = 0;
使用方式:
cout<<Obect::val<<endl;//建议使用第一种,静态方法用类作用域调用
Object obj;
cout<<obj.val<<endl;
*****************************************************
静态成员函数:没有对象的情况下,静态方法依旧可以使用
静态成员函数没有this指针,所以要访问全局变量,所以也不能在静态成员方法中不能调用普通的成员方法
*****************************************************
Object::show()
静态方法中没有this对象,同理因为属于类,而不属于一个对象,所以不能直接修改普通成员变量
如果一定要修改的话,需要手动传一个对象进入静态方法。
static void setNum(Object *obj)//虽然两种方法都可以使对象进行修改,但是需要注意的是,当我们需要修改对象时
static void setNum(Object& obj)//最好使用指针的方法
int main()
{
Object obj;
obj.setNum(obj);//虽然这种方法也能改变对象的某个值,但是从可读性层面来看,不易区分该函数的功能
obj.setNum(&obj);//但是传指针就十分清晰
}
//单例对象的类
class Object
{
public:
~Object();
static void show();
static Object& initObject()//静态函数只被调用一次,当第二次被调用时,不会再次进入函数
{
static Object obj;//这里只能是静态对象,因为需要返回对象的引用,如果设为普通对象,那么在
return obj;//返回时就会返回一个局部对象,导致错误,而且静态成员没有this指针,所以不能返回
} //*this
private:
Object();
Object(const Object& rhs);
static int val;
};
int main()
{
Object &kb=Object::initObject();
}
//另一种写法
class Mouse
{
public:
~Mouse() {}
static Mouse& initMouse()
{
if (msINstance == nullptr)
msINstance = new Mouse();
return *msINstance;
}
static void Delete()
{
delete msINstance;
}
private:
Mouse() {}
static Mouse *msINstance;
Mouse(const Mouse& rhs)=delete;
};
Mouse*::Mouse::msINstance=nullptr;
static
最新推荐文章于 2023-11-22 13:28:53 发布