static

静态变量:是属于整个类的,而不是属于一个对象的,可以在外部直接访问
他是所有对象共享的,只开辟一个空间,不会复制多份,操作的同一个数,不会因为其处于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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值