#include "stdafx.h"
#include <iostream>
#include <ObjBase.h>
using namespace std;
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;
};
//Interface implementation
class CA : public IX,
public IY
{
public:
//Implement interface IX
virtual void __stdcall Fx1()
{
cout<<"CA::Fx1"<<endl;
}
virtual void __stdcall Fx2()
{
cout<<"CA::Fx2"<<endl;
}
//Implement interface IY
virtual void __stdcall Fy1()
{
cout<<"CA::Fy1"<<endl;
}
virtual void __stdcall Fy2()
{
cout<<"CA::Fy2"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
trace("client:create an instance of the componemt");
CA* pA = new CA;
//Get an IX pointer
IX* pIX = pA;
trace("client:use the IX interface");
pIX->Fx1();
pIX->Fx2();
//Get an IY pointer
IY* pIY = pA;
trace("client:use the IY interface");
pIY->Fy1();
pIY->Fy2();
trace("client:delete the componet");
delete pA;
return 0;
}
这个例子的关键之处在于
1、COM接口是在C++中是纯抽象基类实现的
2、一个COM组件可以提供多个接口
3、一个C++类可以使用多继承来实现一个可以提供多个接口的组件