1.什么是静态成员
静态成员是类的所有对象共享的成员,而不是某个对象的成员。
静态成员分为静态数据成员和静态成员函数
2.静态数据成员
如果某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态数据成员,例如:银行账户的利率
静态数据成员在类中只有一个拷贝,不占用对象的存储空间,由该类的所有对象共同维护和使用
3.静态成员函数
如果某个方法为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态成员函数
静态成员函数形参表中没有this指针形参,因此,静态成员函数内不能直接访问this指针
4.使用方法:
//student.h
class Student
{
public: Student(); ~Student();
Student(int pid,char * pname,float s);
Student(const Student& init);
void Display();
static int Number( ); //静态成员函数的声明
private: int id;
char * name;
float score;
static int total; //静态数据成员的声明,代表班级学生总人数
};
//在类体外实现时不要加static关键字,否则错误 且其返回值必须是静态的
//student.cpp
int Student::Number()
{/略/} //Right
static int Student::Number()
{/略/} //Error
类内非静态成员函数可以直接访问非静态成员、静态成员;静态成员函数可以直接访问静态成员,通过对象访问非静态成员
类外访问静态成员受成员访问权限的控制,可以有2种方法:
(1)采用类外访问非静态成员的方法
通过对象名、对象指针、对象引用访问公有静态成员
for example: S1.Number( ) //S1为创建的对象
(2)采用类名加作用域限定符的方法
<类名>::<公有静态成员>
for example: Student::Number( )
且在类的实现前要进行静态成员的初始化和分配空间,即在cpp中定义类中成员函数前,需给静态成员分配空间和初始化
静态成员与全局对象的区别
1.静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突
可以实施封装。
2.静态成员可以是私有成员,而全局对象不可以
3.通过阅读程序容易看出静态成员是与特定类关联的,可以清晰地显示程序员的意图