C++ 如何声明一个变量,使其保持其值,并可从C++;?

C++ 如何声明一个变量,使其保持其值,并可从C++;?,c++,class,scope,C++,Class,Scope,我的项目包含多个类,每个类都有各自独立的.h和.cpp文件。我想声明一个变量的用法,以便可以从任何类访问/修改它的值。您可以添加另一个转换单元来定义命名空间范围内的变量,并通过提供声明使其可访问: var.h: extern int a; #include "var.h" int a = 15; var.cpp: extern int a; #include "var.h" int a = 15; 现在,程序中的每个翻译单元都可以#包括“var.h”并使用a a)给变量一个有意义的、

我的项目包含多个类,每个类都有各自独立的.h和.cpp文件。
我想声明一个变量的用法,以便可以从任何类访问/修改它的值。

您可以添加另一个转换单元来定义命名空间范围内的变量,并通过提供声明使其可访问:

var.h:

extern int a;
#include "var.h"

int a = 15;
var.cpp:

extern int a;
#include "var.h"

int a = 15;
现在,程序中的每个翻译单元都可以
#包括“var.h”
并使用
a


a)给变量一个有意义的、明确的名称,b)将其放在一个命名的命名空间中可能是明智的。

您可以添加另一个转换单元来定义命名空间范围内的变量,并通过提供声明使其可访问:

var.h:

extern int a;
#include "var.h"

int a = 15;
var.cpp:

extern int a;
#include "var.h"

int a = 15;
现在,程序中的每个翻译单元都可以
#包括“var.h”
并使用
a


a)给变量一个有意义的、明确的名称,b)将其放在一个命名的命名空间中可能是明智的。

您可以在一个类中使用公共静态变量,也可以顽皮地在一个模块中的所有类之外声明一个全局变量,然后在其他模块中使用extern关键字引用它


C++是一种混合OOP语言:您不必一直使用类。如果你这样做了,准备好被自以为是的程序员和堆栈溢出潜伏者所激怒

您可以在一个类中使用公共静态变量,也可以顽皮地在一个模块中的所有类之外声明一个全局变量,然后使用extern关键字在其他模块中引用它



C++是一种混合OOP语言:您不必一直使用类。如果你这样做了,准备好被自以为是的程序员和堆栈溢出潜伏者所激怒

在同一命名空间中声明类,在namespace@ForeverStudent:名称空间与任何事情都无关。请注意,通常不赞成使用全局变量。使用它们有很好的理由,但没有你想象的那么多。@ForeverStudent你能举一些例子吗?谢谢,这不是很好的封装。对我来说,这似乎是一个糟糕的设计。在同一命名空间中声明类,在namespace@ForeverStudent:名称空间与任何事情都无关。请注意,通常不赞成使用全局变量。使用它们有很好的理由,但没有你想象的那么多。@ForeverStudent你能举一些例子吗?谢谢,这不是很好的封装。对我来说,这听起来像是一个糟糕的设计。一个类的公共静态数据成员与任何类之外的全局数据成员相比,无论是好是坏,都不会被激怒。@SteveJessop:公共静态数据至少是类的一部分,并且具有一定的封装性。是啊。一个无类的全局函数是1974年的C。火焰级别是完全不同的,因为现在大多数程序员直接学习C++而不学习C。无论哪种方式,你都有一个易变的全局,这可能会让你火冒三丈(我的意思是,它很容易导致提问者会及时发现某些问题,有些人渴望警告其他人远离这些问题)。对我来说,这与OOP的主要原则无关,但YMMV和nicomp最佳实践是什么,我只想在它们之间交换数据classes@Abhishek:最佳实践是实践数据隐藏和封装的OOP原则,在这种情况下,实现为单例设计模式。我知道我会因为建议使用单例而被激怒。就被激怒而言,类的公共静态数据成员并不比任何类之外的全局数据成员好或坏。@SteveJessop:公共静态至少是类的一部分,并且具有一定的封装性。是啊。一个无类的全局函数是1974年的C。火焰级别是完全不同的,因为现在大多数程序员直接学习C++而不学习C。无论哪种方式,你都有一个易变的全局,这可能会让你火冒三丈(我的意思是,它很容易导致提问者会及时发现某些问题,有些人渴望警告其他人远离这些问题)。对我来说,这与OOP的主要原则无关,但YMMV和nicomp最佳实践是什么,我只想在它们之间交换数据classes@Abhishek:最佳实践是实践数据隐藏和封装的OOP原则,在这种情况下,实现为单例设计模式。我知道我会因为建议单身而大发雷霆。虽然这是正确的字面答案,但它将受益于关于替代方案的提示(OP可能认为他需要一个全局的,但实际上并不需要)。静态成员(承认基本上是一个名称空间)或更好的成员函数,可能是单例,等等。@PeterA.Schneider:这属于代码审查。“程序如何在正确的时间在正确的位置获得正确的数据”对于单个问题来说太宽泛了,我们没有可以缩小范围的细节,所以我同意答案不应该被期望提供设计提示。对于可变的全局变量,没有通用的银弹。“依赖注入”,但这就引出了一个问题:如何将它应用到提问者的代码中。@KerrekSB为什么?问题非常广泛,提供替代方案可能有助于未来有类似需求的读者。MathiasEttinger:是的,但是像你这样的声音都会有一个反对的声音尖叫着“回答这个该死的问题”:-)关键是,我们有现有的代码审查设施。OP可以简单地采用这种方法,把它写下来,然后在代码评审中发布,以获得设计反馈。我不需要承担所有这些