在线急等,关于ATL中接口继承使用的有关问题

在线急等,关于ATL中接口继承使用的问题
如果我想设计两个接口,命名为IA与IB,其中IA中有一个f1()的方法,IB从IA继承,而且另外有一个f2()的方法,我想在两个类中CA与CB具体实现。
IDL文件如下:  
import   "oaidl.idl ";
import   "ocidl.idl ";
[
object,
uuid(0BDAAEA2-5D45-455E-8EF5-29906D6FBBBC),
dual,
helpstring( "IA   Interface "),
pointer_default(unique)
]
interface   IA   :   IDispatch
{
[id(1),   helpstring( "method   f1 ")]   HRESULT   f1();
};
[
object,
uuid(22538202-9CED-4324-9821-07F3984B4033),
dual,
helpstring( "IB   Interface "),
pointer_default(unique)
]
interface   IB   :   IA
{
[id(2),   helpstring( "method   f2 ")]   HRESULT   f2();
};

[
uuid(3DF7AD71-683C-4E85-94AE-C53B67CD8E3F),
version(1.0),
helpstring( "Question   1.0   Type   Library ")
]
library   QUESTIONLib
{
importlib( "stdole32.tlb ");
importlib( "stdole2.tlb ");

[
uuid(283DEB10-D082-4240-BC14-E74AFDC56E20),
helpstring( "A   Class ")
]
coclass   A
{
[default]   interface   IA;
};
[
uuid(F0EC3A7B-4426-427F-91B2-FAA24C8528B8),
helpstring( "B   Class ")
]
coclass   B
{
[default]   interface   IB;
};
};

而CA的头文件定义如下:  
//   A.h   :   Declaration   of   the   CA

#ifndef   __A_H_
#define   __A_H_

#include   "resource.h "               //   main   symbols

/////////////////////////////////////////////////////////////////////////////
//   CA
class   ATL_NO_VTABLE   CA   :  
public   CComObjectRootEx <CComSingleThreadModel> ,
public   CComCoClass <CA,   &CLSID_A> ,
public   IDispatchImpl <IA,   &IID_IA,   &LIBID_QUESTIONLib>
{
public:
CA()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_A)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CA)
COM_INTERFACE_ENTRY(IA)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

//   IA
public:
STDMETHOD(f1)();
};

#endif   //__A_H_
问题是CB的头文件,为什么必须在CB中也实现f1()方法了。  
//   B.h   :   Declaration   of   the   CB

#ifndef   __B_H_
#define   __B_H_

#include   "resource.h "               //   main   symbols

/////////////////////////////////////////////////////////////////////////////
//   CB
class   ATL_NO_VTABLE   CB   :  
public   CComObjectRootEx <CComSingleThreadModel> ,
public   CComCoClass <CB,   &CLSID_B> ,
public   IDispatchImpl <IB,   &IID_IB,   &LIBID_QUESTIONLib>
{
public:
CB()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_B)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CB)
COM_INTERFACE_ENTRY(IB)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

//   IB
public:
STDMETHOD(f2)();
//IA
STDMETHOD(f1)();//???????此处必须有,否则编译报错。
};

#endif   //__B_H_

当然如果在一个类中实现这两个接口可以避免两次实现,这个我懂,我想问在两个类的实现中有没有办法,在继承类中直接利用基类的方法,而不需要再实现一遍。