求设计思路,关于父对象和字对象通讯

eduyu 2009-05-09 11:55:28
Class CChild
{
};

Class CParent
{
CChild child;
};

child对象要callCParent的成员函数,怎么设计最佳?

我现在的方法是CParent暴露一个IParent接口,要call的函数被定义在此接口内。
CParent的实例指针被传入CChild对象。
...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eduyu 2009-05-12
  • 打赏
  • 举报
回复
问错事情了。
大多数时候,应该基于接口,而不是基于class编程。这是OOD的基本原则。
liliangbao 2009-05-10
  • 打赏
  • 举报
回复
学习~
lsldd 2009-05-09
  • 打赏
  • 举报
回复
楼主的想法可能是parent只暴露部分方法给child
这样的话,楼主目前的做法没问题啊。
星羽 2009-05-09
  • 打赏
  • 举报
回复
不知道你具体要做什么,像你上面的要求,直至用指针就可以了


class parent;

class child
{
public :
child();
virtual ~child();

private :
parent* m_pParent;
};

pathuang68 2009-05-09
  • 打赏
  • 举报
回复
都是高手!
mengde007 2009-05-09
  • 打赏
  • 举报
回复
不过你不能让他们有继承关系;你这一子,一父类是怎么回事;子类可以直接调用父类的方法;
mengde007 2009-05-09
  • 打赏
  • 举报
回复
暴露出接口这个方法相当好;貌似楼主还没有那样做;修改一下,拿出来我们再参谋一下;
老邓 2009-05-09
  • 打赏
  • 举报
回复
用tr1的function和bind,就可以实现绑定。
可以实现松藕合!
比如:
SysTray::NotifyFunc func = std::tr1::bind(&Frame::onMainTrayNotify, this, std::tr1::placeholders::_1);
_tray.registerNotify(func);
// TODO (qpsoft#1#): 此处32512需要修改成IDI_MAIN
_tray.init(_inst, _wnd, 32512);
_tray.add();

func = std::tr1::bind(&Frame::onInfoTrayNotify, this, std::tr1::placeholders::_1);
_tipFrame.registerNotify(func);
if (_tipFrame.registerWindow(L"Info Frame - QPSOFT.COM"))
{
_tipFrame.create(NULL, L"Info Frame", L"Info Frame - QPSOFT.COM", WS_POPUP, WS_EX_TRANSPARENT);
_tipFrame.showWindow(SW_MINIMIZE);
_tipFrame.showWindow(SW_HIDE);
}
光宇广贞 2009-05-09
  • 打赏
  • 举报
回复
首先,你这个不叫父子类,父子类指的是基类与派生类的关系,子类从父类派生的话,是可以调用父类的非私有成员函数的,不存在你的问题。

对于你的问题解决方法:

Child 类里面声明一个域 CParent* 类型的成员,在 Child 的构造函数中将 CParent 的指针做为参数传进来赋给Child的该成员便可。该法相当于从外部调用CParent类所有可供外部调用的方法。

不建议使用接口,因为这不是接口的定义,你等于做了一个adapter,但是这个没有必要。
  • 打赏
  • 举报
回复
声明为句柄类咯,不是太明白你具体的意思。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧