静态成员变量和静态成员函数

静态成员变量通常要在类内声明,类外初始化,编译阶段就会分配内存,所有的对象共享一块内存
而且通常用类名去访问,因为他不属于任何一个对象,虽然也可以通过对象去访问静态成员变量,但是其实实质上也是访问的同一个东西。
重点注意:静态成员变量是共享一块内存的,也就是说后面给这个变量赋值会覆盖先前的值,同一块地址只能有一个值。

clas Person {
public:
	static int m_age;//类内声明
private:
	static int m_high;//私有权限也是一样的,加上作用域之后类外直接初始化就ok	
};
int Person::m_age = 10;//类外初始化,私有和公有是一样的。
int Person::m_high = 180;//但是私有的不可以在类外访问!!!
int a = Person::m_age; //类外访问公有属性的静态成员变量,正确的
int b = Person::m_high;//错误!!!不可访问

静态成员函数是在类内声明+实现,同样的是共享一份内存。
注意:静态成员函数不能访问普通的成员变量,只能访问静态成员变量

class Person() {
public:
	int age;
	static int m_age;
	static void func() {
		cout << age << endl; //报错,无法访问
		cout <<m_age<<endl; //正确
	}

原因:静态成员函数是共享内存空间的,也就是说不同的对象是用的同样的内存,同样的数据。如果此时静态成员函数里面包含了普通的成员变量,那么当有多个对象的时候,想要通过静态成员函数去操作这个变量的时候就不知道到底操作哪个变量了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值