类与类之间传递数据的问题


有一个有关类的组合体系,例如A的有个成员对象是类B的实例,我这里表示成A->B,A->B->C表示A有个成员对象是B的实例,B有个成员对象是C的实例。那么有个类的组合体系,A->B->C->D->E,现在我要增加一个成员变量到A,例如A->F,但是F又有组合体系即F->G->H->I.连起来就是A->F->G->H->I. 现在类I中的数据需要与E中的数据进行通信,例如I需要读写E类管理的数据,或者E类中的数据发生了改变就要让I得到通知,由于在组合体系中I和E的“距离较远”,通过逐层级的调用关系来实现通信感觉很麻烦。 请问有没有简单直接的方法? 在符合C++标准的情况下,或者是windows平台的情况下,利用消息传递? 或者线程可以实现吗?貌似利用消息传递,需要I类和E类都是窗口类,如果不是窗口类呢?

面向对象 C++

怪叔叔和怪阿姨 12 years, 3 months ago

由于你现在的类是组合关系,不能用回调函数的方法来传递数据,但是我们可以构造一个回调函数的模型出来。
先定义一个接口类

   
  class IBaseDataChange
  
{
public:
void dataChange(...) = 0;
};

在 E 类中含有这个接口的指针,在E的数据发生变化的时候,就调用这个接口。
需要监听E中数据变化的类都要实现这个接口。
当然还有很多具体的细节要考虑,这个相当于设计模式中的观察者模式。

天朝帝的野望 answered 12 years, 3 months ago

Your Answer