一.静态数据成员
当一个类的多个对象需要进行数据共享时,可以通过静态数据成员和静态成员函数进行实现。
例如,学生人数是和每一个学生对象有关的(每次新建一个学生对象,学生人数都应该增1),但它又不能只属于某一个学生对象,这时就可以将学生人数说明成类的静态数据成员,以实现学生对象之间的数据共享。
例程:利用静态数据成员统计对象个数
……
class CStudent //学生类
{
static unsigned long m_nCount; //学生人数,静态数据成员
.....
CStudent::CStudent()
{
.....
m_nCount++;///每调用一次构造函数,学生人数就加1
}
CStudent::~CStudent()
{
delete [] m_strName;
delete [] m_strID;
delete [] m_strMajor;
m_nCount--;
}
....
}
unsigned long CStudent::m_nCount = 0; ///给全局变量初始化为0
int main()
二.静态成员函数
静态成员函数的主要作用是访问静态数据成员。通过静态成员函数,可以在对象建立之前进行静态数据成员的访问。
声明:static unsigned long GetCount(); //静态成员函数
定义:unsigned long CStudent::GetCount() { return m_nCount; }
调用:cout<<"学生人数为:"<<CStudent::GetCount()<<endl;
(1)静态成员函数的声明形式为: static 返回类型 静态成员函数名(参数表);
(2)当静态成员函数是公有成员函数时,主要有以下三种调用形式: ① 类名::静态成员函数名(实参表) ② 对象名. 静态成员函数名(实参表) ③ 对象指针名->静态成员函数名(实参表) 由于类的静态成员函数是类的一部分,而不是某个对象的一部分,建议在进行静态成员函数调用时,使用第①种形式,以方便对程序的阅读与理解。
(3)静态成员函数与非静态成员函数的主要区别在于:非静态成员函数有this指针,而静态成员函数没有this指针。