问题的提出


现状:n个同类的对象,每一个对象都分别有自己的数据成员,各自有值,互不相干。


期望:希望有某一个或几个数据成员为某类所有对象所共有,以实现数据共享。


方案:用全局变量


#include<iostream>
using namespace std;
int N = 0;
class Class
{
private:
int a;
public:
Class(){N++;a=0;}
void add(){N++;}
};


int main( )
{
Class c1, c2;
N=300;
c1.add();
cout<<N<<endl;
return 0;
}



例 引用静态数据成员


#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam, int a):
num(n),name(nam),age(a) { ++count; }
~Student() { --count; }
int getCount() { return count; }
private:
static int count;
int num;
string name;
int age;
};


int Student::count=0;
int main( )
{
Student stu1(1001,"He",40);
cout<<stu1.getCount()<<endl;
Student *pt=new Student(1001,"You",20);
cout<<pt->getCount()<<endl;
cout<<stu1.getCount()<<endl;
delete pt;
cout<<stu1.getCount()<<endl;
return 0;
}



用类名访问静态数据成员


#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam, int a):
num(n),name(nam),age(a) { ++count; }
~Student() { --count; }
int getCount() { return count; }
static int count;
private:
int num;
string name;
int age;
};


int Student::count=0;
int main( )
{
cout<<Student::count<<endl;
Student *pt=new Student(1001,"You",20);
cout<<pt->getCount()<<endl;
delete pt;
cout<<Student::count<<endl;
return 0;
}



为什么出错?


#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam, int a):
num(n),name(nam),age(a) { ++count; }
~Student() { --count; }
int getCount() { return count; }
private:
static int count;
int num;
string name;
int age;
};
int Student::count=0;
int main( )
{
cout<<Student::getCount()<<endl;
cout<<Student::count<<endl;
Student *pt=new Student(1001,"You",20);
cout<<pt->getCount()<<endl;
delete pt;
return 0;
}



静态成员函数


#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam, int a):
num(n),name(nam),age(a) { ++count; }
~Student() { --count; }
static int getCount() { return count; }
private:
static int count;
int num;
string name;
int age;
};
int Student::count=0;
int main( )
{
cout<<Student::getCount()<<endl;
Student *pt=new Student(1001,"You",20);
cout<<pt->getCount()<<endl;
delete pt;
return 0;
}



静态成员函数不能处理非静态数据成员


#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam, int a):
num(n),name(nam),age(a) { ++count; }
~Student() { --count; }
static int getCount()
{ age++; return count; }
private:
static int count;
int num;
string name;
int age;
};
int Student::count=0;
int main( )
{
cout<<Student::getCount()<<endl;
Student *pt=new Student(1001,"You",20);
cout<<pt->getCount()<<endl;
delete pt;
return 0;
}