什么是静态数据成员?
数据成员我们之前学过,是对象的属性。
同一个类,不同的对象,可能拥有不同的属性
例如一个车行,不同的车有不同的颜色,不同的耗油量。。。等等属性
但是当我们统计一个公有的数据,用数据成员有点麻烦
比如每一辆Car,里面有一个数据成员CarNum,记录了车行的总车数,
如果每一个对象,都分别带着CarNum这个数据成员,会有些不方便。
为此,我们需要一个类公有的数据成员,就是静态数据成员
每个对象与静态数据成员关系如下图
静态数据成员的定义以及初始化
静态数据成员用关键字 “static” 定义
如果静态数据成员是public,可以在主函数里面
用 类名::静态数据成员名 访问
由于静态数据成员是类公有的,所以不能在构造函数初始化,应该在类定义完成后,对其进行初始化
定义格式:
class Car
{
public:static int CarNum;Car(){CarNum++;}//新建一个Car对象时候,车数量加一~Car(){CarNum--;}//销毁一个Car对象时候,车数量减一
};
int Car::CarNum=0; //静态成员函数的初始化
什么是静态成员函数?
上面我们了解了什么是静态数据成员。
静态成员函数也可以类比,是一个类的共有的成员函数
定义格式:
class Car
{
public:static int CarNum;Car(){CarNum++;}//新建一个Car对象时候,车数量加一~Car(){CarNum--;}//销毁一个Car对象时候,车数量减一static int getCarNum(){return CarNum;}
};
int Car::CarNum=0; //静态成员函数的初始化int main()
{Car::getCarNum(); //静态成员函数调用return0;
}
几点注意:
- 由于静态成员函数是共有的,所以参数列表里面没有隐含this指针,不可以用const修饰静态成员函数
- 静态成员函数只能访问静态数据成员,不可以访问普通的数据成员