static在自定义类中的使用

static数据成员

声明与初始化

static数据成员的声明在类的内部,而初始化在类的外部,且初始化不需要static关键字。

使用

static数据成员的使用有两种方法:

  1. 类名::静态数据成员
  2. 对象. 静态数据成员

为什么要在类外初始化

这是因为被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗? 所以为了满足C++的static语意,static成员一定要在类外初始化!

static成员函数

声明

static成员函数的声明在类内部。

定义

static成员函数的定义可以在类内部或者外部,但是在外部定义时,不用加static关键字。

调用

调用静态成员函数时,静态成员函数只能访问静态数据成员,因为非静态成员函数在调用时 this指针被当作参数传进,而静态成员函数是属于类,不属于对象,没有 this 指针。

注意事项

  1. 静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致它仅能访问类的静态数据和静态成员函数。
  2. 不能将静态成员函数定义为虚函数,因为静态成员的生存期并不依赖于对象中的vptr
  3. 静态成员初始化与一般数据成员初始化不同,静态数据成员初始化的格式:<数据类型><类名>::<静态数据成员名>=<值>
  4. 为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值