C动态创建对象应用技术讲解_第1页
C动态创建对象应用技术讲解_第2页
C动态创建对象应用技术讲解_第3页
C动态创建对象应用技术讲解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+动态创建对象应用技术讲解AD:C+ 是一款功能强大的基于 C 语言的计算机编程语言。它不 但能支持各种 C 语言的功能, 还可以对包括面向对象在内的 各种程序设计风格的支持。我们今天会为大家详细介绍一下 有关C+动态创建对象的一些应用技巧。C+ delete具体用法简述 C+析构函数不同使用方式 C+隐 式转换各种发生情况 C+显式转换中几种不同的转换方式各 种常用C+类库概览NativeC+是不支持根据类名的C+动态创建对象,比如从一个文本文件中读取类名然后构造一个对象.主要原因是没有丰富的动态元信息,没有单根类库。然而可以 用几种技术进行实现。 如果是类似 Spring 那样的根据配置

2、文 件运行时产生实现某个接口的对象, 那么在 Windows 中至少 有三种办法:1. LoadLibrary + GetProcAdress 。这个不用多解释,可以把DLL 和 Proc 的名字动态传入。2. COM ,根据动态获得的 CLSID 调用 GetClassObject 获得ICIassFactory 接口,然后 Createlnstance。或者直接调用 CoCreatelnstance/CoCreatelnstanceEx 动态产生 CoClass。3. MFC dynamic creation 。Native C+ 不能在运行时编译代码并即时产生对象, 所以 JlT 的动态

3、生成在 C+ 里做不到。在 MFC 中,可以参考 ,总结如下 : MFC的C+动态创建对象可能是最容易使用的方案。 查了一 下 MFC 中 RTCl 的实现,总结一下:DECLARE_ DYNCREATE(class_name) 宏展开后是如下形 式:假设 class_name 是“ CMyCIass ”public: static CRuntimeClass classCMyClass; virtual CRuntimeClass* GetRuntimeClass() const; static CObject* CreateObject();这几行会被加入到 CMyClass 类的声明中。

4、lMPAEMENT_DYNCREATE(classname,base_classname) 宏定 义比较复杂,这个宏展开后类似如下的样子:AFX_DATADEF CRuntimeClass CMyClass:classCMyClass = CMyClass,sizeof(CMyClass),0xFFFF,NULL,RUNTlME_CLASS(CObject),NULL; static const AFX_CLASSSlNlTinit_CMyClass(&CMyClass:classCMyClass);CRuntimeClass* CMyClass:GetRuntimeClass() c

5、onst Return & CMyClass:classCMyClass; CObject*PASCAL CMyClass:CreateObject() return newCMyClass; 这个宏做了如下 3 件事情:1. 初始化 CRuntimeClass 类型的成员变量 classCMyClass2. 创建静态 AFX_CLASSINIT 结构,该结构如下:Struct AFX_CLASSINITAFX_CLASSINIT(CRuntimeClass* pNewClass); 这个步骤地主要作用是把 CMyClass:classCMyClass 添加到 MFC 的一个内部链表中

6、去。3. 覆盖 GetRuntimeClass(), 以返回成员变量 classCMyClass 的 地址。RUNTIME_CLASS 宏展开后如下: (&class_name:class#class_name)C+ 动态创建对象的时候,调用 CRuntime:CreateObject() 方 法。这个方法实际上会去调用 CRuntime 中的一个成员指针,这 个指针指向的正是 CMyClass:CreateObject() 方法。 由上可见, RuntimeClass 宏可接受字符串作为参数,但是, 仍然需要在编译时定义好需要动态创建的对象类型,上文例 子中为CMyClass 。通过 MFC 的这个特性,理论上还是可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论