描述:
用atl写com时,多个类继承一个接口,这个接口中的有些方法有相同的实现
所以我决定把这些相同的实现提到一个基类中,
IA
/ \
CB1 CB2
\ /
CC
比如IA中有3个方法,a1,a2,a3;
CB1实现了方法a1,CB2实现了方法a2,CC实现了方法a3
但是这样出现一个问题,说不能实例化CC,警告提示CB2没有实现IA的a1方法
在这里CB2也是抽象基类,根本不用实例化。。。但是我最终保证CC实现了IA中的3个方法(a1时在CB1中实现的,a2是在CB2中实现的,a3是在CC中实现的)
请问这个问题如何解决???
解决方案1:
class IA
{
public:
virtual void a1()=0;
virtual void a2()=0;
virtual void a3()=0;
};
class CB1:public virtual IA
{
public:
void a1(){printf("a1");}
};
class CB2:public virtual IA
{
public:
void a2(){printf("a2");}
};
class CC:public CB1,public CB2
{
public:
void a3(){printf("a3");}
};
你派生的时候指定的确定是虚基类么?