【07】static成员变量函数

版权声明:zhuhurry 未经博主允许不得转载    https://blog.****.net/zhuhurry

一、static 成员变量
有的时候,我们需要计算某个类的对象以创建对象的个数,我们可以使用全局变量来统计,但是这样破坏了数据的封装性。这时可以使用类的静态成员来解决这个问题。
非static数据成员,存在于类的每一个对象中。而static成员是独立于对象存在。所有该类对象都共享一个static成员变量。
1.static成员的定义
static成员需要在类定义体外进行初始化与定义
static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象
const成员变量只能在构造函数初始化列表中初始化
2.特殊的整型static const成员
整型static const成员可以在类定义体中初始化,该成员可以不在类体外进行定义
非整形的static const成员还是必须在类定义体外初始化和定义
3.static成员优点
static成员的名字是在类的作用域中,因此可以避免与其他类成员或全局变量冲突
可以实施封装,static成员可以是私有的,而全局对象不可以
读程序容易看出static成员与某个类相关联,这种可见性可以清晰地反映程序员的意图。
示例一,static和const在类中修饰成员变量注意事项
【07】static成员变量函数
示例二,计算几个类有多少个对象
【07】static成员变量函数

二、static成员函数
①static成员函数没有隐含的this指针
②非静态成员函数可以访问静态成员
③静态成员函数不可以访问非静态成员(实际上是直接访问是不可以的,间接地访问是可以的,比如通过类指针或类引用)
【07】static成员变量函数
如何让static成员函数访问非static成员变量?
【07】static成员变量函数

三、类/对象大小计算
类/对象的大小与成员变量有关和成员变量无关
类/对象的大小计算遵循前面学过的结构体对其原则
类/对象的带下与静态成员变量无关
虚继承和虚函数对类的大小的影响见后面