以前写程序没有太注意全局变量的问题,都说好的程序不应该使用全局变量,所以最近我想是应该好好限制一下全局变量的使用,特来MSDN向大家取经,望大家能够传授点经验,我写的是MFC的程序,对于全局变量有以下几个问题想请教一下大家:1、在写程序时应该如何有避免使用全局变量   (如:类与类之间,线程与线程之间)2、MFC中在C*App和CMainFrame中定义的变量都可以在任何类中调用,那它们之间有没有什么区别呢,如果使用全局变量的话
   在哪一个类中定义更好呢?3、现在有这样一种情况,我插入一个对话框,关联了一个类CMyDialog。如果想创建并显示此对话框,我需要创建一个
   CMyDialog的对象m_mydialog。
   我想在任何一个类中都可以对mydialog操作,我的做法是把mydialog在MainFrame中定义,但这是否已经成为了全局变量,
   这种情况应该如何不使用全局变量来实现?就这些,希望了解朋友说说自己的经验,最好能够针对我的问题做个清晰的阐述,在此亿分谢谢。

解决方案 »

  1.   

    这种情况最好在,.cpp开始的地方用 extern 定义 全局指针
      

  2.   

    1、在写程序时应该如何有避免使用全局变量 (如:类与类之间,线程与线程之间)
    ===========
    这个不好说,自己把握吧,尽量做成类成员变量。2、MFC中在C*App和CMainFrame中定义的变量都可以在任何类中调用,那它们之间有没有什么区别呢,如果使用全局变量的话
      在哪一个类中定义更好呢?
    ==========
    这个类中定义的都不是全局变量,在C*App中能用的原因是有一个全局变量theApp,而CMainFrame框架类对象在程序执行期间总是存在的。3、现在有这样一种情况,我插入一个对话框,关联了一个类CMyDialog。如果想创建并显示此对话框,我需要创建一个
      CMyDialog的对象m_mydialog。
      我想在任何一个类中都可以对mydialog操作,我的做法是把mydialog在MainFrame中定义,但这是否已经成为了全局变量,
    =======
    和上面一样,这个并不是全局变量。
      

  3.   

    恩    原来如此   你的意思是谘在C*App与MainFrame中定义的不是全局变量,看来我一直是错的。
    那对于C*App与MainFrame   在哪个当中定义 “全局变量” 更好点呢?
      

  4.   

    全局变量 可以自己写个单件类 把所有的全局变量封装进去
    http://blog.csdn.net/qianlima888/archive/2010/12/26/6099352.aspx
      

  5.   

    又有一个新问题,关于用MFC编程时,我通常把一些菜单的响应函数放到MainFrame类中、因为它可以全局调用,但不知道这样合适不,几个函数不要紧,如果很多的话对程序会有影响吗?如果有应该如何解决。
      

  6.   

    把变量放在App中太麻烦了  使用theApp怕不安全 所以在每次使用变量时都要获得App的指针  有没有什么好办法可以解决这个问题呢?
      

  7.   

    1、在写程序时应该如何有避免使用全局变量 (如:类与类之间,线程与线程之间)
    ===========
    这个看需求。其实用成员变量都可以的。2、MFC中在C*App和CMainFrame中定义的变量都可以在任何类中调用,那它们之间有没有什么区别呢,如果使用全局变量的话
      在哪一个类中定义更好呢?
    ==========
    在C*App 本来就是程序类啊。3、现在有这样一种情况,我插入一个对话框,关联了一个类CMyDialog。如果想创建并显示此对话框,我需要创建一个
      CMyDialog的对象m_mydialog。
      我想在任何一个类中都可以对mydialog操作,我的做法是把mydialog在MainFrame中定义,但这是否已经成为了全局变量,
    =======
    不是全局变量