一、静态成员变量
1)定义静态成员变量
关键字 static 可以用于说明一个类的成员,静态成员提供了一个同类对象的共享机制
把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员
静态成员局部于类,它不是对象成员
例如:#include<iostream>using namespace std;class counter{static int num ; //声明与定义静态数据成员public :void setnum ( int i ) { num = i ; } //成员函数访问静态数据成员void shownum() { cout << num << '\t' ; }} ;int counter :: num = 0 ;//声明与定义静态数据成员void main (){ counter a , b ;a.shownum() ; //调用成员函数访问私有静态数据成员b.shownum() ;a.setnum(10) ;a.shownum() ;b.shownum() ;}
2)使用静态成员变量
// 例 使用公有静态数据成员 #include<iostream.h>class counter{ public :counter (int a) { mem = a; }int mem;//公有数据成员static int Smem ; //公有静态数据成员} ;int counter :: Smem = 1 ; //初始值为1 void main(){ counter c(5);int i ;for( i = 0 ; i < 5 ; i ++ ){ counter::Smem += i ;cout << counter::Smem << '\t' ; //访问静态成员变量方法2}cout<<endl;cout<<"c.Smem = "<<c.Smem<<endl; //访问静态成员变量方法1cout<<"c.mem = "<<c.mem<<endl;}
二、静态成员函数
1)概念
静态成员函数数冠以关键字static
静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针
在类外调用静态成员函数用 “类名 :: ”作限定词,或通过对象调用
2)案例
#include <iostream>using namespace std;class X{int DataMem;public:static void StaFun(int i,X *p);};void X::StaFun(int i,X *p){p->DataMem=i;}void g(){X x;X::StaFun(1,&x);x.StaFun(1,&x);}
3)疑难问题:静态成员函数中,不能使用普通变量。
//静态成员变量属于整个类的,分不清楚,是那个具体对象的属性。