【C++第七课】---类的静态成员
一、什么叫成员变量?
1.通过对象名能够访问 public 成员变量
2.每个对象都可以有只属于自己的成员变量
3.成员变量不能在对象之间共享
问题的引入---我们如何统计程序在运行期间有多少个对象同时存在呢?
使用普通的成员变量可以做到么?显然是不可以的,因为对象调用结束的时候成员变量是自动销毁了
所以,我们回忆一下C里面是怎么做的?对,就是静态成员变量和全局变量,但是在这里我们用全局
变量不合适,具体原因想必大家都知道,不详述。
二、什么叫做类的静态成员
1、在C++中可以定义静态成员变量和静态成员函数
1.静态成员属于整个类所有,不需要依赖任何对象
2.可以通过类名直接访问public 静态成员
3.可以通过对象名访问public 静态成员
4.静态成员函数可以直接访问静态成员变量(非静态成员函数也可以直接访问静态成员变量)
2、静态成员变量的定义
在定义时直接通过static关键字修饰
—静态成员变量不依赖于任何对象,,需要在类外单独分配空间
—语法规则::Type ClassName::VarName ;
3、静态成员函数的定义
在定义时直接通过static关键字修饰
—其余部分与普通成员函数定义相同
三、静态成员类得个示例
#include <iostream>using namespace std;struct Test1{int i;int j;short m;short n;double h;double k;};struct Test2{int i;int j;short m;short n;double h;double k;};struct Test3{int i;int j;short m;short n;double h;double k;int fun(){m = n;i = j;}};int main(int argc, char** argv){cout<<"sizeof(Test1) = "<<sizeof(Test1)<<endl;cout<<"sizeof(Test2) = "<<sizeof(Test2)<<endl;cout<<"sizeof(Test3) = "<<sizeof(Test3)<<endl;return 0;}gcc环境下编译运行结果如下:
sizeof(Test1) = 28
sizeof(Test2) = 28
sizeof(Test3) = 28
没错,这里涉及到字节对齐和成员变量/成员函数 存储的问题,前者不详述,对后者进行简单的说明
1、C++类对象中的成员变量和成员函数是分开存储的
1.成员变量
—普通成员变量:存储于对象中,struct变量有相同的
内存布局和字节对齐方式
—静态成员变量::存储于全局数据区中
2.成员函数
—存储于代码段
2、静态成员函数与普通成员函数的区别
静态成员函数不包含指向具体对象的指针
普通成员函数包含一个指向具体对象的指针
C++ C++中类的普通成员函数都隐式包含
一个指向当前对象的this指针。
六、最后做个小结
1、C++类中可以包含属于类概念的静态成员 类中可以包含属于类概念的静态成员
2、静态成员变量在全局数据区分配空间
3、静态成员函数不包含隐藏的this指针
4、通过类名可以直接访问静态成员
5、通过对象名可以访问静态成员,,所有的对象可以共享 所有的对象可以共享同一个类的静态成员