我写了两个组件 IParent  和   IChild
 IParent  包容 IChild,也就是说    IParent  中有一个数据成员: IChild* m_pIChildIChild 方法有一个 属性  BSTR nameIParent  中有两个方法:IChild* CreateChild(BSTR name);
HRESULT SetChildName(BSTR name);我的目的是 IChild 的  name  属性只能由 IParent 设置,其他人只能通过 get_Name 方法读,
因此我不能让 IChild 有 set_Name 方法,否则所有获得了 IChild 的地方都可以设置他的名字了  这个情况我该怎么做呢??我的想法是在IChild  的实现类  CChild上加  set_Name  方法,IChild* CreateChild(BSTR name){
    CChild* pCChild=new  CChild();
    pCChild->set_Name(name);
    CComQIPtr<IChild> pIChild=pCChild->GetUnknown();   
     return pIChild;
}HRESULT SetChildName(BSTR name){
    CChild* pCChild=(CChild*)m_pIChild;     
    pCChild->set_Name(name);
    return S_OK  
}//大概是这个意思,就当伪码看吧 但总感觉这不是正确的方式:
1.直接  new  CChild();  这种方式构造组件是不是会有问题
2.CChild* pCChild=(CChild*)m_pIChild;    把接口转化成实现类会不会有问题请各位指教!!!!!!!!!

解决方案 »

  1.   

    你把set_Name设成私有就可以了吧? 接口就是一个struct,随你怎么捏
      

  2.   

    IChild* CreateChild(BSTR name);
    HRESULT SetChildName(BSTR name);
    这2个方法是IParent的,并不是IChild的,没有暴露IChild的name属性啊
      

  3.   

    这种情况就没必要公开IChild接口,或者可以根本不需要IChild接口。
      

  4.   

    IChild* CreateChild(BSTR name); 
    HRESULT SetChildName(BSTR name); 
    这2个方法是IParent的,并不是IChild的,没有暴露IChild的name属性啊
    ————————————————————————————————————
    关键是我的这两个方法的实现里怎么把  name  的值设置到IChild里这种情况就没必要公开IChild接口,或者可以根本不需要IChild接口。
    ————————————————————————————————————
    IParent  接口还有  IChild*  GetChild()  函数,
    而使用IParent的客户需要获得IChild,去读IChild的数据,
    实际上IParent 可能有多个IChild  而  IChild有很多数据项
      

  5.   

    我以为IChild只有一个数据和方法。
    你的方法就可以啊,因为接口并没有提供set_Name方法,所以外界也无法访问,但是接口的实现者CChild提供了set_Name,这个是类成员函数而不是接口方法。