接口的实现。

class IX
{
public:
 
virtual void Fx1() = 0 ;
 
virtual void Fx2() = 0 ;
}

class IY
{
public:
 
virtual void Fy1() = 0 ;
 
virtual void Fy2() = 0 ;
}

class CA: public IX,
   
public IY
{
public:
 
virtual void Fx1()
 
{
   cout
<<"Fx1()"< }

 
virtual void Fx2()
 
{
   cout
<<"Fx2()"< }

 
virtual void Fy1()
 
{
   cout
<<"Fy1()"< }

 
virtual void Fy2()
 
{
   cout
<<"Fy2()"< }

}


相关概念:纯抽象基类:指包含纯抽象函数的基类。
                   纯虚构函数:用 =0 标记的虚构函数。
多重继承:指一个类直接继承一个以上的基类。
对纯虚函数的继承称为接口继承。
IX和IY并不是真正意义上的COM接口,为使之成为COM接口,它必须继承一个名为IUnknown的接口。



///interface.h 
#include "iostream.h"

#include 
"objbase.h"


void trace(const char * pMsg){cout<<pMsg<<endl;}

interface IX
{
 
virtual void __stdcall Fx1() = 0;
 
virtual void __stdcall Fx2() = 0;
}
;
interface IY
{
 
virtual void __stdcall Fy1() = 0;
 
virtual void __stdcall Fy2() = 0;
}
;

class CA: public IX,
       
public IY
{
public:
 
virtual void __stdcall Fx1(){cout<<"CA::Fx1()"<<endl;}
 
virtual void __stdcall Fx2(){cout<<"CA::Fx2()"<<endl;}

 
virtual void __stdcall Fy1(){cout<<"CA::Fy1()"<<endl;}
 
virtual void __stdcall Fy2(){cout<<"CA::Fy2()"<<endl;}
}
;
// com_1.cpp : Defines the entry point for the console application.
//

#include 
"stdafx.h"
#include 
"IFace.h"

int main(int argc, char* argv[])
{
 trace(
"Create an instance of the componet!");
 CA 
* pA = new CA;
 IX 
* pIX = pA;
 trace(
"use the ix interface!");
 pIX
->Fx1();
 pIX
->Fx2();

 IY 
* pIY = pA;
 trace(
"use the iy interface!");
 pIY
->Fy1();
 pIY
->Fy2();
 pA
->Fx1();
 trace(
"delete the componet!");
 delete pA;
 printf(
"Hello World!\n");
 
return 0;
}


      
运行结果如下:
com_1.JPG

总结:
1、COM接口在c++中用纯抽象基类实现。
2、一个COM组件可以提供多个接口。
3、一个C++类可以使用多继承实现一个提供多个接口的组件。
在com中,对一个组件的访问只能通过函数,而决不能直接通过变量。

Posted on 2005-10-24 17:50 艾凡赫 阅读(494) 评论(0)  编辑 收藏 引用 所属分类: COM

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理