CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

公共对象如何放置?

楼主maquanwei(深爱编程)2003-12-02 23:43:35 在 VC/MFC / 基础类 提问

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

1 楼ross33123()回复于 2003-12-03 03:57:44 得分 50

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

2 楼canjian(奋斗,探求,不达目的誓不罢休!)回复于 2003-12-03 08:12:08 得分 0

有过类似问题,关注Top

3 楼HanZhu1(寒竹)回复于 2003-12-03 09:22:00 得分 10

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

4 楼maquanwei(深爱编程)回复于 2003-12-03 09:22:51 得分 0

提前,希望更多的朋友帮我一下,谢谢Top

5 楼wangweixing2000(星(inspiration(灵感)))回复于 2003-12-03 10:12:17 得分 15

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

6 楼maquanwei(深爱编程)回复于 2003-12-04 19:07:25 得分 0

名字空间,也是一个办法……Top

7 楼checkyvc6(已所不欲,勿施于人)回复于 2003-12-04 19:38:27 得分 0

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

8 楼maquanwei(深爱编程)回复于 2003-12-04 20:35:52 得分 0

是啊,对于整个程序都要访问的对象,究竟怎样防治才算是合理,更安全呢?  
   
  尤其是,有些对象,它的初始化需要用到程序其他地方的数据,这样作为全局变量就非常麻烦了。Top

9 楼ahao(天·狼·星星)回复于 2003-12-04 21:16:10 得分 15

用全局变量,或者singlton,但最好是加一个辅助类,控制生命期。  
  Top

10 楼maquanwei(深爱编程)回复于 2003-12-11 23:33:54 得分 0

非常感谢大家。  
   
  很快我所在的项目组就要决定如何放置这些公共对象了,到时候我会回来告诉大家我们的选择。  
   
  同时欢迎大家继续提出各种意见。Top

11 楼lye(laye)回复于 2003-12-12 00:12:21 得分 10

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

12 楼lye(laye)回复于 2003-12-12 00:12:35 得分 0

学习中。。。。Top

13 楼maquanwei(深爱编程)回复于 2003-12-18 12:21:01 得分 0

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

相关问题

  • 如何在tomcat中放置公共类
  • 如何放置控件
  • 讨论一下Session中放置Recordset等对象的优缺点!
  • 关于GridLayout中对象放置位置的问题
  • 公共对象模块是什么东西?MSDN里没有!
  • 如何在ControlBar和CoolBar上放置Menu?
  • 如何放置javabean的*.java and *.class
  • 如何放置javabean的*.java and *.class
  • 如何在 DBGRID 中 放置一个 checkbox!
  • class 与 jsp 文件如何放置?

关键词

  • 指针
  • 全局变量
  • 对象
  • 程序
  • 类
  • 放置
  • 公共
  • 全局
  • helper
  • app

得分解答快速导航

  • 帖主:maquanwei
  • ross33123
  • HanZhu1
  • wangweixing2000
  • ahao
  • lye

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo