全局变量一般这样定义:
1。在一类的.cpp中定义 int myInt;
然后再在要用到的地方的.cpp里extern int myInt;这样就可以用了。
2。在stdafx.cpp中加入:
int myInt;
然后在stdafx.h中加入:
extern int myInt
这样定义以后无论在什么文件中都是可见的.
3。比较规范的是,先定义一个Glbs.h,把所有的全局变量原始定义放进去。然后定义一个Externs.h,把你先前定义在Glbs.h中的变量都加上extern。注意:如果你在Glbs.h中设置了初值,那么在Externs.h中就不要加值了。然后调用时,第一次调用的#include <Glbs.h>,以后调用的#include <Externs.h>
看了这几中方法,我突然在想,好象在vc里全局变量完全可以不用啊,可以这样做:在MainFrm.h中定义:int myInt;以后在要用到的地方:CMainFrm *frm=(CMainFrm*)AfxGetMainWnd();
frm->myInt;
我现在搞不清这样用好不好???是不是这样就可以不用全局变量了??望大哥们指点一下,谢谢!!
关于变量放在什么地方不能一概而论。
即使全局变量也有它的意义。
如果你把他放到main frame的class中,首先你要想好,这个变量到底应不应该作为frame的成员变量存在。假如,你的全局变量里存放的是窗口的背景颜色,那把它作为main frame的成员是合适的;如果全局变量里存放你从注册表里读出来的配置信息,那放在main frame中作为成员就不合适了,而应该放到App类中。
原则是必须根据类的概念来决定成员变量,每个变量只可能有一个最正确的地方。虽然你把所有全局变量都放在main frame中,当然是可以的,程序也不会出错,但从逻辑上讲是错误的。
另外,该作为全局变量的(也就是放在哪各类里都不合适的),就应该写成全局变量。而不是一定要教条的把全局变量全去掉。
当然,决大多数情况是应该放在class里的变量却没放到class中,而是写成全局变量了。
天外流星说的很对,如果全局变量多的话,那么我们可以将这些全局变量封装到一个类中,比如CGlobal, 而且此类应该在整个程序中只有一份,那么我们可以用singleton(单例设计模式)来建立这个类,来实现高内聚,松耦合的OOP
class CGlobal
{
public:
static CGlobal* GetInstance();
bool SetAppFlag(int appFlag); //为全局变量封装方法
int GetAppFlag(){return appFlag;} //为全局变量封装方法
...
private:
CGlobal();
static CGlobal* m_instance;
//以下是封装后的全局变量
int appFlag;
};