我在写一个MFC多文档界面程序。
我为我的程序构造了几个公共类:
class helper1;
class helper2;
...
class helper3;
在程序的每个View、Doc等等都需要调用这几个类的方法,所以对于这个程序来说,我只需要对上面的类实例化一次就够了。
现在的问题出来了,实例化的对象该放置在哪里比较合适呢?
我的同事的建议是都放到App类里面,做为成员存在,而且有些成员是以指针的形式存在的。使用的时候有两种方法:
1、AfxGetApp()->pHelper1->Method1();//直接把成员指针做为公共成员,然后调用,优点是简单,但是直接暴露指针给外部,有可能造成危险。
2、AfxGetApp()->Method1();//在App中添加新的方法,然后调用自己的指针完成操作,优点是保护了指针,缺点是让App类增加了无数接口。我认为,这几个类彼此互不相干,都丢到App里面有些不合适,程序的结构也越来越混乱。
我的一个解决方法是声明几个全局对象,可是全局对象又好象不妥,小组成员都非常害怕全局对象这种使用方法。请问大家有没有更好的方式组织程序?让程序的结构清晰,访问简单。

解决方案 »

  1.   

    我认为放到 App 对象里和作为全局变量只是看上去不同,放到 App 里只是看起来更加 OO 一点,所以下面讨论不区分两者。如果对象里只有方法,没有数据,或者说是无状态的,那么用全局变量完全没问题。其实如果不在意表面的话,只有方法的类还不如直接写作全局的函数。如果这些 Helper 对象是有状态的,那么可能应该在需要的时候动态创建,而不是声明一个全局变量了事。
      

  2.   

    我感觉还是把需要共享的class放在app里,然后在需要用的文件头加上
    extern class helper1;  这样app的指针就不会共享,而只有这个类的对象是共享的
      

  3.   

    这个很好办了,给这几个类都加上一个字的命名空间就可以了!eg:
    namespace your_name
    {
    ....
    }
    你每一个类的.h和.cpp都用这个包起来!用的时候也很简单eg:
    头文件肯定是要include进去的
    然后用    your_name::helper1::....就可以了,这样不必担心那些问题了,哈哈!
      

  4.   

    有意思的问题,可以多多讨论
    我个人认为:ross33123() 的看法和我差不多,其实全局变量不是那么的可怕,毕竟mfc 本省也用到了不少的全局变量ben
      

  5.   

    根据Windows编程思想,每个程序有且只有一个app对象,代表程序本身,还是放在app里吧。
      

  6.   

    最终采用了SingleTon方法达到了目的。