static声明的成员或函数,是由类的所有对象公用,不会在每个类保存一个副本,它属于类本身的,即使没有实例化对象,仍可以对其访问或调用。
 
/*类静态成员*/

#include <iostream>
using namespace std;

class A{
  static int a;//声明静态成员
  int b;
public:
  void set(int i,int j){a=i;/*修改静态成员a的值*/b=j;}
  void show();
};

int A::a;//定义部分
void A::show()
{
  cout<<"静态成员a:"<<a<<endl;
  cout<<"非静态成员b:"<<b<<endl;
}
int main(int argc,char**argv)
{
  A aa1,aa2;
  aa1.set(11,22);
  aa1.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa2.set(33,44);
  aa2.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa1.show();//任何对静态成员a的修改都可在其他对象体现出来
    
  return 0;
}
 
只需在普通的定义方式前加一个关键字static,这样就成了静态成员。
但是有点需要注意的是其如何初始化,因为它独立 于类对象,我们不能在构造函数里初始化,因为在所有对象实例化之前就应该存在(即使没有调用构造函数,也应该存在).那在什么位置初始化呢。其实大家想想类成员函数定义的位置就知道了,很像
 
也是在外部对其再声明定义,注意没有static。
 
int A::a;
 
 
下面的声明为public并初始化了一个值
/*类静态成员*/

#include <iostream>
using namespace std;

class A{
  int b;
public:
  static int a;//声明静态成员
  void set(int i,int j){a=i;/*修改静态成员a的值*/b=j;}
  void show();
};

int A::a=123;//定义部分
void A::show()
{
  cout<<"静态成员a:"<<a<<endl;
  cout<<"非静态成员b:"<<b<<endl;
}
int main(int argc,char**argv)
{
  cout<<A::a<<endl;
  A aa1,aa2;
  aa1.set(11,22);
  aa1.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa2.set(33,44);
  aa2.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa1.show();//任何对静态成员a的修改都可在其他对象体现出来
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  A::a=100;//public可以直接访问
    
  aa1.show();
  return 0;
}
 
截图: