C++类中的静态成员和静态成员函数
静态成员
在 C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供 所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间 的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
class StringBad { private: static int num_strings; } //初始化 int StringBad::num_strings = 0;
注意:
1,static 成员变量实现了同类对象间信息共享。
2,static 成员类外存储,求类大小,并不包含在内。
3,static 成员是命名空间属于类的全局变量,存储在 data 区。
4,static 成员只能类外初始化。
5,可以通过类名访问(无对象生成时亦可),也可以通过对象访问。
静态成员函数
#include <iostream> using namespace std; class Student { private: double score; static int count; static double sum; public: Student(int s) { score = s; count++; sum += score; } static void average(); }; void Student::average() { cout<<"average scores: "<<sum / count<<endl; } int Student::count = 0; double Student::sum = 0; int main() { Student students[5] = {Student(1), Student(2), Student(3), Student(4), Student(5)}; Student::average(); return 0; }
1,静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员, 完成对静态数据成员的封装。
2,静态成员函数只能访问静态数据成员。 原因:非静态成员函数,在调用时this 指针被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针。