Skip to content

静态成员

静态成员是在所有对象中共享的成员,通过static来修饰

1.定义静态成员

1.1 静态变量

类中定义的静态变量,必须在类内声明数据,在类外初始化赋值

c++
class Person {
    
public:
	static int a;
};

int Person::a = 666;

1.2 静态常量

类中定义的静态常量,切数据类型是整形intshortlonglonglongcharbool)字符和布尔也是以整形存储,则允许在定义时初始化赋值,const写在static前后都可

c++
class Person {
public:
	static const int a = 666;
	const static int b = 666;

	static const double PI;			
};

double Person::PI = 3.14;

2.访问静态成员

2.1 创建对象访问

静态成员属于一个类,而不是属于每个对象,因此每个对象对静态成员访问时,访问的都是同一个地址

c++
#include<iostream>
using namespace std;

class Person {
public:
	static int a;
};
int Person::a = 666;


int main() {
	Person p1;
	Person p2;

	cout << p1.a << endl;		// 666
	cout << p2.a << endl;		// 666

	cout << &p1.a << endl;		
	cout << &p2.a << endl;		

	return 0;
}

image-20240718103913244

当我们用其中一个对象将静态变量修改时,其他对象再次访问该静态变量,也是已经被修改过的

c++
#include<iostream>
using namespace std;

class Person {
public:
	static int a;
};
int Person::a = 666;


int main() {
	Person p1;
	Person p2;

	cout << p1.a << endl;		// 666
	cout << p2.a << endl;		// 666


	p1.a = 777;

	cout << p1.a << endl;		// 777
	cout << p2.a << endl;		// 777

	return 0;
}

2.2 通过类访问

静态成员的好处就是,可以不用创建对象,直接通过类访问

c++
#include<iostream>
using namespace std;

class Person {
public:
	static int a;
};
int Person::a = 666;

int main() {
	cout << Person::a << endl;		// 666

	Person::a = 777;

	cout << Person::a << endl;		// 777
	return 0;
}

MIT Licensed