求设计思路,关于父对象和字对象通讯
Class CChild
{
};
Class CParent
{
CChild child;
};
child对象要callCParent的成员函数,怎么设计最佳?
我现在的方法是CParent暴露一个IParent接口,要call的函数被定义在此接口内。
CParent的实例指针被传入CChild对象。
[解决办法]
不知道你具体要做什么,像你上面的要求,直至用指针就可以了
class parent;class child{public : child(); virtual ~child();private : parent* m_pParent;};
[解决办法]
楼主的想法可能是parent只暴露部分方法给child
这样的话,楼主目前的做法没问题啊。
[解决办法]
声明为句柄类咯,不是太明白你具体的意思。
[解决办法]
首先,你这个不叫父子类,父子类指的是基类与派生类的关系,子类从父类派生的话,是可以调用父类的非私有成员函数的,不存在你的问题。
对于你的问题解决方法:
Child 类里面声明一个域 CParent* 类型的成员,在 Child 的构造函数中将 CParent 的指针做为参数传进来赋给Child的该成员便可。该法相当于从外部调用CParent类所有可供外部调用的方法。
不建议使用接口,因为这不是接口的定义,你等于做了一个adapter,但是这个没有必要。
[解决办法]
用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); }
[解决办法]
暴露出接口这个方法相当好;貌似楼主还没有那样做;修改一下,拿出来我们再参谋一下;
[解决办法]
不过你不能让他们有继承关系;你这一子,一父类是怎么回事;子类可以直接调用父类的方法;
[解决办法]
都是高手!
[解决办法]
学习~