静态数据成员
静态成员,指的是在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。即声明为static的类成员或者成员函数便能在类的范围内同享。
说明:
1)静态数据成员定义与普通数据成员相似,但前面要加上static关键字。
例如:
static float total;//总分
static int count; //对象个数static float average;//平均分
2)静态数据成员的初始化与普通数据成员不同。静态数据成员初始化应在类外单独进行,而且要在定义对象前进行。一般是在main函数前面。
初始化的格式:
数据类型 类名::静态数据成员名=初始值;
float Student::total = 0;//静态数据成员的初始化
int Student::count = 0;//静态数据成员的初始化
float Student::average = 0;//静态数据成员的初始化3)静态数据成员属于类(准确地说,是属于类对象的集合),而不像普通数据成员那样属于某一个对象,因此可以使用 “类名::”访问静态数据成员。用类名访问静态数据成员的格式如下:
类名::静态数据成员名
4)静态数据成员与静态变量一样,是在编译时创建并初始化。
5)私有静态数据成员不能在类外直接访问,必须通过公有的成员函数访问。
6)C++支持静态数据成员的一个重要原因是可以不必使用全局变量。依赖于全局变量的类几乎都是违反面向对象程序设计的封装特性的。静态数据成员主要用作类的所有对象公用的数据,如统计总数,平均数等。
声明为静态的数据成员,我们定义的数据成员就可以做到共享,比如我们计算班级的平均分,我们需要使用每一个对象分数相加,然后除对象的个数,我们就需要两个变量来储存总分和对象个数。
我们定义全局变量也可以解决数据共享,但是全局变量数据存在不安全性,不符合我们面对对象程序设计的思想。我们将静态数据成员在私有成员处定义,这样我们可以起到保护数据的作用。
静态成员函数
在类定义中,前面有static说明的成员函数称为静态成员函数。静态成员函数属于整个类,是该类所有对象共享的成员函数,而不属于类中的某个对象。定义静态成员的格式:
static 返回类型 静态成员函数名(参数表)
调用公有的静态成员函数的几种方法
类名::静态成员函数名(实参表)
对象.静态成员函数名(实参表)
对象指针->静态成员函数名(实参表)
说明:
1)静态成员函数只能访问静态成员。
2)私有静态成员函数不能做类外部的函数和对象访问。
3)使用静态成员函数的一个原因是,可以用它在建立对象之前调用静态成员函数,以处理静态数据成员,这是普通成员函数不能实现的功能。
4)编译系统将静态成员函数限定为内部连接,也就是说,与现行文件相联接的其他文件中的同名函数不会与该函数发生冲突,维护了该函数使用的安全性。
5)静态成员函数是类的一部分,而不是对象的一部分。
6)静态成员函数与非静态成员函数的重要区别是,非静态成员函数有this指针,而静态成员函数没有this指针。