静态数据成员在内存中只占一份空间。
每个对象都可以引用这个静态数据成员。
静态数据成员的值对所有对象都是一样的。
如果改变它的值,则在各对象中这个数据成员的值都同时改变了。//静态数据成员存储在全局数据区
在为对象所分配的空间中不包括静态数据成员所占的空间。
静态数据成员不随对象的建立而分配空间。(也就是就算没有创建对象,这个静态数据成员也存在)
静态数据成员只能在类体外进行初始化:
数据类型 类名::静态数据成员名=初值;// int A::a=3;
不能用参数初始化表对静态数据成员进行初始化。(如果未赋值,自动赋0值)
静态数据成员既可以通过对象名引用,也可以通过类名引用。
#include <iostream>
using namespace std;
class teacher {
public:
static void get_b() {
cout << b << endl;
}
private:
static int b;
};
int teacher::b = 3;
int main() {
teacher a;
a.get_b(); 通过对象名引用
teacher::get_b();//通过类名引用
system("pause");
}
#include <iostream>
using namespace std;
class point {
public:
point(int x, int y) {
this->x = x;
this->y = y;
}
public:
int x;
int y;
static int z;
};
int point::z = 3;
int main() {
point p1(1, 2);
point *p = &p1;
cout << p1.z << endl; //第一种
cout << p->z << endl; // 第一种
cout << point::z << endl; //第二种
system("pause");
}
通过第一种方式访问z,实际上在C++内部都会被转换成第二种形式。
静态成员函数的作用是为了能处理静态数据成员,当调用一个的成员函数,会把对象的地址赋给成员函数的this指针。静态成员函数不属于对象,所以它没有this指针。因此也决定了静态成员函数无法访问非静态成员。