ATL实战开发指南笔记-----2.1
2014-05-07 23:16
183 查看
COM可以用vb,java,C++语言进行编写,它只关心组件的功能,与语言无关。可以把组件编译成dll的格式或者exe格式。
COM的鲁棒性----可以对com组件进行升级,使旧的程序仍然能够运行,而新的程序可以利用组件的新特性。
COM的位置透明性------客户机不需要知道组件的存放的位置
COM也有面向对象的特性----封装继承多态
组件需要提供接口给外部使用--------------------------所以它有一个可爱的名字:服务器(server)
而使用组件的软件实体-----------被迫只能喊为:客户机(client)
COM的主要工作是解决接口的实现和使用等问题
这是C++的对外接口
输出结果:
COM的鲁棒性----可以对com组件进行升级,使旧的程序仍然能够运行,而新的程序可以利用组件的新特性。
COM的位置透明性------客户机不需要知道组件的存放的位置
COM也有面向对象的特性----封装继承多态
组件需要提供接口给外部使用--------------------------所以它有一个可爱的名字:服务器(server)
而使用组件的软件实体-----------被迫只能喊为:客户机(client)
COM的主要工作是解决接口的实现和使用等问题
这是C++的对外接口
classIMath { virtualintAdd(inta,intb)=0; virtualintSubtract(inta,intb)=0; };
用户可以使用它的接口来实现自己的代码
COM也是和它差不多的,他们之间的其他差异在于:
1----COM的语言无关性
2----COM的位置透明性
#include<string>
#include<iostream>
classFruit
{
public:
virtualvoidDraw(){}
private:
std::stringm_strcolor;
};
classApple:publicFruit
{
virtualvoidDraw()
{
std::cout<<"Iamanapple\n";
}
};
classGrannySmith:publicApple
{
virtualvoidDraw()
{
std::cout<<"IamaGrannysmithApple\n";
}
};
classbanana:publicFruit
{
virtualvoidDraw()
{
std::cout<<"Iamanbananana\n";
}
};
classorange:publicFruit
{
virtualvoidDraw()
{
std::cout<<"Iamanorange\n";
}
};
intmain()
{
Fruit*f[5];
f[0]=newApple;
f[1]=newGrannySmith;
f[2]=newbanana;
f[3]=neworange;
f[4]=neworange;
for(inti=0;i<5;i++)
{
f[i]->Draw();
}
return0;
}
输出结果:
Iamanapple
IamaGrannysmithApple
Iamanbananana
Iamanorange
Iamanorange
上面就是C++的一个简单的多态例子。这里利用虚函数和动态绑定
如果你使 Fruit中的虚函数Draw,变成纯虚函数。则这个类就变为了抽象类,那么派生类必须实现它
virtualvoidDraw()=0;
C++是使用虚表(vtable)来实现动态绑定的,COM也是使用C++中的虚表结构来建立组件的接口。因为虚表是一个包含函数地址的数组。
因为COM使用了一个vtable指针,所以COM接口中只能提供方法。
//下一章:既然如此相似,那么如何从一个C++的类转变到COM组件
相关文章推荐
- ATL实战开发指南--活动模板库3.1
- ATL实战开发指南---2.4
- ATL实战开发指南---2.2
- ATL开发指南第三章笔记
- ATL实战开发指南---2.3
- ATL开发指南学习笔记: COM与C++的VTable(虚拟表)
- ATL实战开发指南-----2.5
- 第10课:底实战详解使用Java开发Spark程序学习笔记(二)
- Oracle Database 11g SQL 开发指南学习笔记:简单函数
- 网页实战开发笔记之——最全面的HTML的头部信息介绍
- Android开发笔记之adb参数指南
- 【HTML+CSS+JavaScript】网页实战开发笔记之二—关于Web标准,你不能不知道的事
- 实战开发 C# 索引器学习笔记
- iPhone应用程序开发指南 学习笔记
- 【Java笔记】Java开发实战经典 - 第四章
- Kotlin开发安卓APP笔记实战-写个简易记事本(逻辑)
- lua游戏开发实践指南学习笔记1
- PHP学习笔记——ThinkPHP开发指南-关联模型之关联定义
- Web Service笔记(五):CXF开发RESTful风格的Web Service(实战)
- 慕课网实战—《用组件方式开发 Web App全站 》笔记一