在C++中,类的局部变量、成员变量、全局变量、静态全局变量:
局部变量:局部变量是在函数内部定义的变量,它只能在该函数的范围内被访问和修改。当函数执行结束后,局部变量的内存空间会被释放。局部变量主体是函数。局部变量在栈内存,随着⽅法的进栈⽽存在,随着⽅法的出栈⽽消失。
成员变量:类的成员变量是指在类的定义中定义的变量,它们是该类的属性,描述了该类的状态。成员变量可以被该类的成员函数访问和修改,也可以通过类的对象访问和修改。成员变量可以分为公有成员变量、私有成员变量和保护成员变量,分别对应不同的访问权限。
公有成员变量可以被该类的成员函数、该类的对象以及该类的派生类访问和修改。私有成员变量只能被该类的成员函数访问和修改,不能被该类的对象或该类的派生类直接访问。保护成员变量的访问权限与私有成员变量相同,但可以被该类的派生类访问和修改。
在定义类的成员变量时,需要指定变量的类型、名称和初始值。成员变量的初始值可以在类的构造函数中进行设置。在类的定义中,可以使用访问修饰符来控制成员变量的访问权限。如果没有指定访问修饰符,则默认为私有成员变量。成员变量在堆内存,随着对象的创建⽽存在,随着对象的消失⽽消失。
全局变量:在函数外定义的变量是全局变量,全局变量可以为本文件中其他函数所共有,它的有效范围从定义变量的位置开始到本源文件结束。全局变量在整个程序的生命周期中存在,从程序开始运行时就被分配内存,直到程序结束时才被释放。
全局变量可以分为外部全局变量和内部全局变量:
外部全局变量:默认情况下的全局变量都是外部全局变量,可以被其它文件访问的全局变量我们称之为外部全局变量。如果外部全局变量在文件开头定义,则在整个文件范围内都可以使用该外部全局变量,如果不在文件开头定义,按上面规定作用范围,只限于定义点到文件终了,如果定义点之前的函数想引用该外部全局变量,则应该在该全局变量前使用关键字 extern ,作外部全局变量说明。
在.h文件里声明外部全局变量如果没有加 extern 修饰符,使用该全局变量处会提示语法错误——未声明的表示符,需要在使用全局变量的文件种添加头文件 include “XXX.h;由此可见,不加修饰符的全局变量作用域是声明全局变量的文件。
如果一个全局变量没有加extern关键字,并且在其他文件中没有被声明为 extern,那么它是不能在其他文件中被访问的。这是因为C++编译器在编译每个文件时,会将该文件中的全局变量当作该文件的私有变量来处理,其他文件无法直接访问它。使用extern在不同源文件中共享全局变量
内部全局变量:静态全局变量也是定义在全局作用域下的变量,但与普通全局变量不同,它只能在声明它所在的文件中可见。使用 static 关键字声明的变量具有静态存储持续时间,即在程序的整个生命周期期间都存在。其他文件中不能直接访问静态全局变量。给全局变量加上static关键字的就是内部全局变量,只能被当前文件访问。多个同名的内部全局变量如果不在同一个文件中, 那么指向不同的存储空间。可以提高数据的安全性, 不让别人在其它文件中修改我们的全局变量。