CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

深入浅出二版P462-463对象动态生成?

楼主nano(linux)2001-03-14 17:31:00 在 VC/MFC / 基础类 提问

 
  在class   CDocTemplate中定义了  
  CRuntimeClass   *   m_pDocClass;  
   
  然后在  
  CDocument   *CDocTemplate::CreateNewDocument()  
  {............  
    CDocument*   pDocument=(CDocument*)m_pDocClass->CreateObject();  
    ....................  
  }  
   
  m_pDocClass所指的"运行时对象"中的   m_pfnCreateObject是什么呢?  
  如果为NULL,则不能生成对象。是否"运行时对象"一定要初始化,然后  
  调用以上函式生成一个对象,再强制转化成文档指针?  
   
  请各位朋友指教一二?  
   
  注:对象即“物件”。  
  问题点数:30、回复次数:3Top

1 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:09:00 得分 0

凡是可以动态创建的类都必须有一个没有任何参数的构造函数,用来在动态创建过程中使用.  
  m_pfnCreateObject就是指向这个构造函数的函数指针.  
   
  在MFC中凡在类中使用DECLARE_DYNAMIC宏以及DECLARE_DYNCREATE   和DECLARE_SERIAL的都是支持动态创建的类,这三个宏的功能实际上逐个递增的.  
  将宏展开可以看到用于动态创建的构造函数声明以及定义,定义在相应的IMPLEMENT_XXXX宏中Top

2 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:17:00 得分 0

CRuntimeClass类有一个成员函数叫CreateObject,它实际上调用的就是前面所提的那个没有任何参数的构造函数,如果没有即为NULL,则不能动态创建该类的实例,CreateObject方法将返回NULL.Top

3 楼joke100(咱们去SLEEP吧...)回复于 2001-03-14 18:22:00 得分 30

另外,按照编译器的特性,如果你没有在类中显式的定义上面所提到的缺省构造函数,编译器会为你生成一个,一般来讲普通情况下都可以由它来生成,但是如果你的类中有一些特殊的指针成员,编译器生成的只是一个使用浅拷贝的构造函数,也就是说自动生成的构造函数可能不合要求,在CreateObject的调用中可能会失败.Top

相关问题

  • 动态生成对象
  • 今天终于拿到了《深入浅出MFC(第二版》和《深度探索C++对象模型》
  • 对象生成问题求解
  • 怎么才能生成sqlparametercollection对象
  • 如何用类名生成对象
  • 派生类生成对象会引起基类生成对象么.
  • 深入浅出MFC
  • 深入浅出mfc?
  • 深入浅出VCL???
  • 急!!!!深入浅出问题

关键词

  • 函数
  • 编译器
  • 指针
  • null
  • 构造函数
  • 生成
  • pdocclass
  • 对象
  • 类
  • 调用

得分解答快速导航

  • 帖主:nano
  • joke100

相关链接

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

广告也精彩

反馈

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