类对象类厂.ppt
《类对象类厂.ppt》由会员分享,可在线阅读,更多相关《类对象类厂.ppt(43页珍藏版)》请在三一文库上搜索。
1、类对象(类厂),杨之江 ,内容,复习 类对象 Q&A,复习,复习,IUnknown接口 自定义接口 使用COM组件 思考题,C+回顾,面向对象基本特征:封装、继承、多态 封装 属性和功能集成,对外隐藏实现细节 对外接口:成员函数 和/或成员变量 继承 类继承 实现继承 多态 不同情形中用同一接口完成不同功能,类层次图,虚函数,实现了多态性 说明:在函数说明之前加上关键字virtual 在基类中的说明中,定义虚函数 class CSharp virtual void Display(); 调用: CSharp *pSharp=GetCurSharp(); pSharp- Display();,纯
2、虚函数,定义: class CSharp virtual void Display()=0; 特点: 不能生成实例 派生类中必须提供相应虚函数的实现,This指针,在类内部指向自身的指针 this指针隐含地用来引用对象的数据成员和成员函数。 x this-x; (*this).x;,宏,符号常数定义 格式:#define 宏符号名 常数/字符串 例:#define STDMETHODIMP HRESULT STDMETHODCALLTYPE 带参数的宏 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE 宏只是替换,保持变量的整体性,类型转换,
3、static_cast,模板函数,是一个函数,由编译器根据模板自动产生 例子 template Type max(Type a, Type b) return(ab?a:b); 使用函数模板:直接带参数调用 max(3,5); max(3.5,5.5); 编译器产生下面两个函数,然后再调用: int max(int a,int b) return(ab?a:b); double max(double a,double b) return(ab?a:b);,类模板,类模板的一般形式: template class className /类声明体 ; template 返回类型 className
4、:MemberFuncName1(形式参数表) /成员函数定义体 ,模板类,实实在在的类定义,类定义中的参数被实际类型所代替 例 template class CArray : public Cobject 使用 CArray Array;,IUnknown接口,IUnknown是所有接口的基础 每个COM接口都必须从IUnknown继承过来 从C+来看, IUnknown是一个纯虚基类 IUnknown接口提供了两个非常重要的特性:生存期控制和接口查询 IUnknown 接口有三个函数: HRESULT QueryInterface(REFIID riid,void *ppvObject);
5、 ULONG AddRef(); ULONG Release();,自定义接口,自定义接口实质也是纯虚类 自定义接口从IUnknown派生 COM组件实际上是一个C+类 ,从自定义接口派生 COM组件必须实现IUnknown和自定义接口,使用COM组件,用组件类型标识符CLSID和接口标识符IID一起创建组件对象。如: IFirstInterface* pFI=NULL; HRESULT hr=CoCreateInstance( CLSID_FirstComponent,NULL, CLSCTX_INPROC_SERVER, IID_IFirstInterface, reinterpret_c
6、ast( / 当处理完之后,必须释放接口 else / 创建失败.,思考题,CoCreateInstance是什么函数?如何用? CoCreateInstance是怎么找到CLSID对应的组件的? 包含组件的程序模块在那里找? 我的机器上要是有几个相同的组件程序模块,Windows会启动那一个? 创建的组件对象在那里? 组件程序和我的程序在相同的内存地址空间里吗? 组件程序什么时候退出? 我的程序要是忽然死了,会出现什么样的状况?组件程序还能正常退出吗?,类对象,调用 CoCreateInstance 时发生了什么?,CoCreateInstance COM 搜索注册表找CLSID DLL(或
7、 EXE) CoCreateInstance 封装了下列功能: IClassFactory *pCF; CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, (void *),类对象(类厂),定义:用于创建COM对象的COM对象,主要目的是实现IClassFactory接口 目标:完成COM对象的创建过程,更好地把客户和对象隔离开来 特殊性 (1)它不是通过调用 CoCreateInstance 或 IClassFactory:CreateInstance 创建 (2)它总是通过调用 CoGetClassObject 创
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象
链接地址:https://www.31doc.com/p-2611217.html