我写了两个组件 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; 把接口转化成实现类会不会有问题请各位指教!!!!!!!!!
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; 把接口转化成实现类会不会有问题请各位指教!!!!!!!!!
解决方案 »
- exe刻到光盘后运行不了
- unsigned short __stdcall SListen(void *)' : overloaded function differs only by
- 【高分!】关于类封装窗口之诡异问题?!
- 关于GDI+画矩形问题?
- 请教个控件状态的问题!
- 如何使用ADO 向IMAGE字段追加数据?
- 初学一菜问:得到一个窗口的CWnd指针,请问如何访问这个窗口中的控件?
- 怎样在多线程里同步简单类型的变量?
- 一个VC++的输出问题,不知是不是bug,和BC++ 5.0的输出不同.
- 寻找IM软件源代码!!!!
- 我有两个使用CAxDialogImple创建的Dialog,其中一个以DS_CONGROL风格显示在另一个窗口中,如何实现阿?
- 如何验证一个被脚本可调用的有效的COM
HRESULT SetChildName(BSTR name);
这2个方法是IParent的,并不是IChild的,没有暴露IChild的name属性啊
HRESULT SetChildName(BSTR name);
这2个方法是IParent的,并不是IChild的,没有暴露IChild的name属性啊
————————————————————————————————————
关键是我的这两个方法的实现里怎么把 name 的值设置到IChild里这种情况就没必要公开IChild接口,或者可以根本不需要IChild接口。
————————————————————————————————————
IParent 接口还有 IChild* GetChild() 函数,
而使用IParent的客户需要获得IChild,去读IChild的数据,
实际上IParent 可能有多个IChild 而 IChild有很多数据项
你的方法就可以啊,因为接口并没有提供set_Name方法,所以外界也无法访问,但是接口的实现者CChild提供了set_Name,这个是类成员函数而不是接口方法。