1.为什么需要静态成员?
对象与对象之间的成员变量是相互独立的,可以由地址看出,如下程序所示 ;
#includeusing namespace std;class myClass{public: int member;};int main(){ myClass a ,b; cout << "a成员变量的地址: "<<&a.member<
要想共用数据,则需要使用静态成员和静态方法 ;
2.数据成员可以分为静态变量、非静态变量两种。
- 静态成员:
- 静态成员的定义和声明要加个关键static ;
-
- 非静态成员:
- 非静态成员的生存期决定于该类的生存期.
3.初始化类的静态成员
静态成员变量的初始化与一般成员变量的初始化不同,即它的初始化格式为:
<数据类型><类名>::<静态成员变量> = <值>
4.类的静态数据成员有两种访问方式:
- 静态成员变量使用前必须先初始化 ;
- 静态成员变量在类内声明,且必须带static关键字;在类外初始化,且不能带static关键字
- 如果静态成员变量的访问权限允许的话,即为public成员,可在程序中,按上述格式来引用静态成员变量;
- 把变量声明为私有静态成员后只能通过该类的公有成员函数来访问。在访问前还需要创建一个类的对象;
#include
using namespace std;class A{public: int getx(){ return A::x; } void setx(int i){ A::x =i; }private: static int x;};int A::x ;//一定要在main函数之外声明;int main(){ A a ; a.setx(2); cout<< a.getx(); return 0;}
5.静态成员函数
静态成员函数与静态成员变量一样,都是在类的内部实现,属于类定义的一部分:
- 出现在类体外的函数不能指定关键字static;
- 静态成员之间可以互相访问,包括静态成员函数访问静态成员变量和访问静态成员函数;
- 非静态成员函数可以访问静态成员函数和静态成员变量;
- 静态成员函数不能访问非静态成员函数和非静态成员变量;
-
静态成员函数在类内声明,且必须带static关键字;在类外实现,且不能带static关键字