请参阅下面的C++代码片段:
#include .....
Class1 class1;
Class2 class2;
...
void Class3::foo() {
...
}
Run Code Online (Sandbox Code Playgroud)
变量有哪些:class1和class2?它们是全局变量吗?静态变量?实际上这些是什么?在C++ OO编程中,使用这些是不错的做法,因为文件中任何类的任何成员函数都可以访问它们?
对不起初学者的问题.
谢谢.
是的class1和class2是全局变量.
什么是全局变量?
在块外部声明的变量称为全局变量.全局变量具有程序范围,这意味着它们可以在程序中的任何位置访问,并且只有在程序结束时才会被销毁.
由于全局变量具有程序范围,因此可以跨多个文件使用它们.为了使用已在另一个文件中声明的全局变量,您必须使用前向声明或头文件以及extern关键字.Extern告诉编译器您没有声明一个新变量,而是引用其他地方声明的变量.
在C++ OO编程中,使用这些是不错的做法,因为文件中任何类的任何成员函数都可以访问它们?
通常,人们使用全局变量,因为:
但全球变量是邪恶的!!
为什么?
原因很简单,它们通过多种方式增加了程序的复杂性.
很难跟踪修改的全局变量,因为它可以在任何多个文件中的任何位置进行修改.
在多线程程序中,多个线程可以竞争获取这些全局变量,因此应始终通过某种同步机制来保护这些全局变量.通常,除非您了解整个系统,否则很难理解并编写此类机制.
既然你问过,
什么是静态变量?
静态变量是由关键字限定的变量static.
静态变量与全局变量有何不同?
需要考虑的重要区别点:
范围:
对象的范围是对象在被访问的位置是否可见(以其名称所知).
静态变量是定义它们的块的本地变量,而全局变量可以跨程序的任何文件访问.