1、 组件:组件是将应用程序分割成多个独立部分,维护时用新组件替代旧组件。而传统的应用程序是将程序分割成文件、模块和类,将他们编译并链接成一大块。
组件特点:
① 、可修改,可替换,满足用户的需求
② 、有组件库可以快速组装,AcitveX控件
③ 、分布式:事务逻辑和系统服务相分离,简化了系统开发的复杂性,
④ 、组件需要动态连接,,不可能在运行时编译。
⑤ 、要封装,不要改变其接口、
⑥ 、以二进制的形式发布,已编译好的。
2、 接口:提供两个不同对象间的一种连接,计算机是通过一组函数连接起来的,其实这组函数实质上就是定义了程序中不同部分的接口。对于COM接口是包含一个函数指针数组的内存结构。
用纯虚函数作为接口。看下面经典例子:
#define InSruct struct
InSruct IA //定义接口
{
virtual void Fun1()=0;
};
class CA:public IA //定义组件(注意类可以继承结构体,结构体也能继承结构体)
{
void Fun1()
{
cout<<"class Fun1()";
}
};
Void main()
{
CA *pCa=new CA;
IA *pIa=pCa;
pIa->Fun1(); //表示接口:在程序内部实现。
delete pCa;
}
//特别注意的是:类不是组件,组件不一定要类实现,也不不一定需要继承、
3、 组件的内存(探讨COM接口为什么可以用纯抽象基类实现COM组件)
抽象基类提供vtbl指针指向虚拟函数、每个对象共享同一个vtbl指针,但数据各自不同
//////////////////////////////////////////////////////////////////////////////////////////////
4、 客户通过不断询问清晰组件干什么,但没有完成知道组件内部怎么样。
客户如何向组件询问关于它所支持的接口?组件如何回答、以及这种请求应答方式的结果、
① 、HRESULT QueryInterface( REFIID iid, void** ppvObject);函数查询某个组件是否支持某个特定的接口
//iid 是要查询的接口ID, ppvObject是返回的接口的指针,
② 关于类型转换:
static_cast
用法:static_cast < type-id > ( expression )
该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
③把空指针转换成目标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
posted on 2011-09-21 19:54
Yu_ 阅读(1045)
评论(0) 编辑 收藏 引用 所属分类:
Windows程序设计