静态成员包括静态数据成员和静态成员函数
引入:如果定义一个班级类,那么全班学生的共有属性(如班主任、全班人数等信息)如何封装?
由此我们引入面向对象中十分重要的静态数据成员
一、如何声明类的静态数据成员
class Student{
static string tutor;
static int num;
public:
//略
};
二、如何定义和初始化
1.在类的成员函数定义的源程序文件(而非头文件)中
2.在所有的函数之外
定义类的静态数据成员,并且在定义时可以显式地初始化
class Student{
static string tutor;
static int num;
public:
//略
};
string Student::tutor="Zhang San";
int Student::num=0;
三、静态数据成员的生命期是全局的:
在main函数执行前创建,直到main函数返回后销毁
四、如何访问静态数据成员
1、利用该类的某个具体对象
Student s1;
s1.num;
2、直接访问
Student::num;
静态成员函数
必要性:在没有对象,且类的静态数据成员是受保护的或私有的情况下,要访问该静态数据成员只能通过公开的静态成员函数来实现。
一、声明
static int Getnum();
二、访问(与访问静态数据成员类似)
1、利用该类的某个具体对象
2、直接访问
三、静态成员函数与非静态成员函数的异同
1、相同点:均存放在计算机内存的代码区,被该类所有对象共享。
2、不同点:静态成员函数不隐含 与任何具体对象联系
也就是说,静态成员函数没有隐含 传递“本对象地址”的this指针
四、注意
静态成员函数在处理具体对象时需要将对象(最好是对象的引用或常量引用)进行显式地传递。