65,186
社区成员




#include<iostream>
using namespace std;
struct IA
{
virtual void funInIA() = 0;
};
struct IB
{
virtual void funInIB() = 0;
};
struct C : public IA, public IB
{
virtual void funInIA()
{
cout << "funInIA" << endl;
}
virtual void funInIB()
{
cout << "funInIB" << endl;
}
};
int main()
{
IA* pIA = new C;
pIA->funInIA();
IB* pIB = (IB*)(void*)(pIA);
//IB* pIB = new C;
pIB->funInIB();
delete pIA;
return 0;
}
struct INameMgr
{
public:
virtual void InitModule(void) = 0; // 在这个函数里new出C
virtual void UninitModule(void) = 0; //看函数名就知道是什么意思了吧
virtual void GetObject(int IID, void **ppv) = 0;
};
struct IA {...};
struct IB {...};
struct IAB : public IA, public IB {/*do nothing here*/};
struct C : public IAB {...};
struct D : public IAB {...};
boost::shared_ptr<IAB> CreateInstance(void) { return new C; }
int main(void)
{
boost::shared_ptr<IAB> pIAB= CreateInstance();
pIAB->funInIA();
pIAB->funInIB();
return 0;
}
#define IIDMgr 3
void CreateInstance(int IID, void **ppv)
{
do
{
if (IIDMgr != IID)
break;
INameMgr *pIntf = NULL;
pIntf = new CNameMgr();
if (NULL == pIntf)
break;
*ppv = pIntf;
} while (FALSE);
}