加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

COM聚合的简单模拟

发布时间:2020-12-13 20:35:25 所属栏目:百科 来源:网络整理
导读:COM中的聚合原理看起来比较简单,但是由于其要实现两个IUnknown,所以实现起来比包容复杂,下面我做了个简单的模拟程序,看起来就比较容易理解,代码如下: #include iostream.h class IUnknown { public: virtual void funcM() = 0; virtual void funcN() =

COM中的聚合原理看起来比较简单,但是由于其要实现两个IUnknown,所以实现起来比包容复杂,下面我做了个简单的模拟程序,看起来就比较容易理解,代码如下:

#include <iostream.h>

class IUnknown
{
public:



virtual void funcM() = 0;
virtual void funcN() = 0;
virtual void funcP() = 0;
};

class INondelegation
{
public:
virtual void nonfuncM() = 0;
virtual void nonfuncN() = 0;
virtual void nonfuncP() = 0;

};

class A : public IUnknown
{
public:

virtual void funcM();
virtual void funcN();
virtual void funcP();

};
#if 1
void A::funcM()
{
cout<<"class A funcM IUnknown"<<endl;
}

void A::funcN()
{
cout<<"class A funcN IUnknown"<<endl;
}

void A::funcP()
{
cout<<"class A funcP IUnknown"<<endl;
}
#endif


class B : public A,
public INondelegation
{
public:
B::B();

virtual void funcM()
{
cout<<"class B funcM - INondelegation"<<endl;
}

virtual void funcN()
{
cout<<"class B funcN - INondelegation"<<endl;
}

virtual void funcP()
{
cout<<"class B funcP - INondelegation"<<endl;
}

virtual void nonfuncM();
virtual void nonfuncN();
virtual void nonfuncP();

};

B::B()
{

}


void B::nonfuncM()
{
cout<<"class B funcM INondelegation,no delegation"<<endl;
}


void B::nonfuncN()
{
cout<<"class B funcN INondelegation,no delegation"<<endl;
}

void B::nonfuncP()
{
cout<<"class B funcP INondelegation,no delegation"<<endl;
}

void trans(B& bt,void** pvv)
{
#if 1
*pvv = static_cast<A*>(&bt);
#else
*pvv = static_cast<INondelegation*>(&bt);
#endif
reinterpret_cast<IUnknown*>(*pvv)->funcM();

}


void main()
{
#if 1
//A a;
B b;
B* pp = &b;
IUnknown* pa = NULL;
trans(b,(void**)&pa);


//reinterpret_cast<IUnknown*>(pa)->funcM();

//pa->funcM();
#else

/*
B b;
INondelegation* pfb = &b;
IUnknown* pb = (IUnknown*)&b;
pb->funcM();
//pfb->nonfuncM();

*/

#endif

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读