C++类中静态变量和普通变量的区别
静态变量:
1.静态变量会被编到程序的exe里面,从程序启动到结束,它一直存在;
2.静态变量的初始化值为0;
3.全局变量默认是静态变量;
4.在类中的函数变量前面加了static的也是静态变量,只不过被语言限定在只能在函数内部使用;
5.在有MFC对话框的程序了,如果一个变量和对话框绑定,那么该变量就不能声明为静态变量,函数也是一样的,因为声明为静态变量后不能随时接受对话框内的值, 主要是因为静态变量的值设置后是不能被修改的;
6.可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存 在于内存,所以非静态成员可以直接访问类中的静态成员;
7.在类的内部变量前面加static,则将此变量声明为静态成员变量,无论这个类的对象定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共 享访问。即静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对 象都是一样的,它的值可以更新;
8.类中静态变量的初始化形式为:<数据类型><类名>::<静态数据成员> = <值>;
9.静态数据成员和普通数据成员一样遵从public、private、protected访问规则,如果静态数据成员的访问权限允许的话,即为public成员,可在程序中,按上述格 式来引用静态数据成员;
10.同全局变量相比,使用静态数据成员有两个优势:
(1)静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性;
(2)可以实现信息隐藏。静态数据成员可以使private成员,而全局变量不能。
11.对于类内部的静态成员函数是不具备this指针的,而非静态函数都会有一个指向类的对象本身的一个this指针,静态成员函数无法访问属于类对象的非静态数据成 员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。
非静态变量:
1.非静态变量只是在函数被调用的时候非配到栈里面的,函数调用结束后,该变量也就被销毁了;
2.非静态变量的值是可以改变的。
3.当类被实例化后,可以通过实例化的类名进行访问,非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期的概念,因为静态成员始终驻留在内存 中。