在 C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储
一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实
现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内
存。
类的静态成员,属于类,也属于对象,但终归属于类。
写法格式
//声明
static 数据类型 成员变量; //在类的内部
//初始化
数据类型 类名::静态数据成员 = 初值; //在类的外部
//调⽤
类名::静态数据成员
类对象.静态数据成员
例如 生成一个Box类,要求所在Box的高度height一致。
#include <iostream>
using namespace std;
class Box
{
public:
Box(int l, int w):length(l),width(w) {
}
int volume()
{
return length * width * height;
}
static int height;
int length;
int width;
};
int Box::height = 5;
int main()
{
// cout<<sizeof(Box)<<endl;
// Box b(2,3);
// cout<<sizeof(b)<<endl;
cout<<Box::height<<endl;
Box b(1,1);
cout<<b.height<<endl;
cout<<b.volume()<<endl;
return 0;
}
静态成员变量需要注意的是:
static 成员变量实现了同类对象间信息共享。
static 成员类外存储,求类大小,并不包含在内。
static 成员是命名空间属于类的全局变量,存储在 data 区。
static 成员只能类外初始化。
可以通过类名访问(无对象生成时亦可),也可以通过对象访问
静态成员函数
写法格式
//声明
static 函数声明
调动:
类名::函数调用
类对象.函数调用
例如:
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,int a,float s):num(n),age(a),score(s){}
void total()
{
count++;
sum += score;
}
static float average();
private:
int num;
int age;
float score;
static float sum;
static int count;
};
float Student::sum = 0;
int Student::count = 0;
float Student::average() {
return sum/count;
}
int main()
{
Student stu[3]= {
Student(1001,14,70),
Student(1002,15,34),
Student(1003,16,90)
};
for(int i=0; i<3; i++) {
stu[i].total();
}
cout<<Student::average()<<endl;
return 0;
}
静态成员函数需要注意的是
静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员, 完
成对静态数据成员的封装。
静态成员函数只能访问静态数据成员。原因:非静态成员函数,在调用时this 指
针被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针