C++学习笔记:static关键字在类和结构体中的作用【Cherno】

首先,类和结构体中static变量会让在类和结构体【下文统称结构体】定义一个只有该类能调用的变量,且这个变量有一个很特殊的性质,比如你弄了个worker结构体,且在里面定义了一个static声明过的变量num,那么尽管你定义了多个worker实例,但每个worker中都没有一个num变量,但每一个worker实例都可以调用num,且最有意思的是每个worker调用的是同一个num;

我们写一个源.cpp如下:

#include

class worker {
public:
	static int num;
	int wage, age;

	void show() {
		std::cout << wage << ' ' << age << std::endl;
	}

};

int worker::num;

int main() {

	worker a, b;

	a.num = 1;
	b.num = 2;

	std::cout << a.num;
}

有人可能要问:这个int worker::num;是一个什么东西,这其实很简单,因为num变量像是一个相对于worker类的一个”全局变量“,所以C++要求将类static变量独立声明,如果去掉这一句,则会报错:

 看上面main函数里的内容,如果num是一个常规变量时,那么输出的应该是1,但num是static变量,所以b.num和a.num是同一个变量,要看是不是同一个变量,我们只需要看两个变量的地址是否相同即可,我们输出a.num和b.num的地址:

C++学习笔记:static关键字在类和结构体中的作用【Cherno】_第1张图片

 C++果然是最好的语言;

当然,我们也可以直接通过下面的语句调用num:

worker::num=1;

其实b.num和a.num都等价于上面的语句,这样可以更直观地看出两个其实是同一个变量;

我们也可以对类里面的方法【函数】进行static,但是这样的话,函数就会失去调用this指针的功能,即不可以调用在类中的非static变量,只能调用类里的static变量【不知道this指针的可以去百度一下,可能本菜以后会出一个相关的文章】;

你可能感兴趣的:(C++)