我现在碰到一个问题,大家看看怎么解决好: 首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。 
现在有两个父类,CFather1, CFather2. 
这两个类都继承了CAsyncSocket 
分别在CFather1和CFather2里重载CAsyncSocket::OnConnect和CAsyncSocket::OnRecevie函数 
class CFather1: public CAsyncSocket
{
public:
   virtual void OnConnect( int nErrorCode );
   virtual void OnReceive( int nErrorCode );
}
class CFather2: public CAsyncSocket
{
public:
   virtual void OnConnect( int nErrorCode );
   virtual void OnReceive( int nErrorCode );
}
CFather1要connect到port1端口拿数据,CFather1要connect到port2端口拿数据,IP一样的。 
现在有一个子类CChild同时继承CFather1和CFather2。 因为我要在CChild里把从CFather1和CFather2拿到的数据统一做处理后再传给主程序。 我的目的是要在CChild类中获得CFather1和CFather2接收到的数据,用什么方法比较好呢?
能不能直接在CChild类中接收数据呢?如果分别在在CFather1和CFather2里接收数据我怎么在CChild里得到数据做统一处理?现在的问题是如果我在CChild里: 
class CChild: public CFather1, public CFather2 

public: 
.... 
private: 
CFather1 father1; 
CFather2 father2; 
} 这样实例化的话, 
father1.create() //建立socket 
father1.connect(ip,port); 
father1.send(data); 
然后会在father1的OnRecevice里得到数据,因为不是窗口程序,数据没什么好办法通知给CChild 
如果在CChild里重载OnRecevice的话,我怎么知道是重载了哪个父类的方法,两个名字、参数都一样的,而且我是不是要connect两次?? 非常晕,新手基础不好,望大家详细指教!

解决方案 »

  1.   

    现在有一个子类CChild同时继承CFather1和CFather2。 
    最好不要这样做,因为我要在CChild里把从CFather1和CFather2拿到的数据统一做处理后再传给主程序。 
    这个可用的办法很多,不一定要同时继承两个class个人意见: 有些技术环节,能不用就不用(如CView,双继承,com)
      

  2.   

    改成OnReceive1,OnReceive2,就不晕了,CFather1和CFather2有自己接受到的数据,就很容易汇总
      

  3.   

    你对c++类继承机制完全没概念,对虚函数也不够了解,对面向对象的编程也没概念。
    1,你那个CFather1和CFather2其实是同一个功能块的,你的函数又是虚函数,没必要用两个类。
    2,子类从父类继承了所有公有和保护的方法和数据,你直接用子类去做就行了。
    3,面向对象的话,其实不会这么做。
    a,你只需要定义一个CFather1,然后派生出2个对象来接收数据。
    b,做数据处理的功能和接受收据的功能不要混在一块,单独拿出来,所以不建议从CFather1继承,因为完全没关系。你只需要new一个内存接受数据,接到数据后,把Buf指针传给CChild做处理就行了,处理完了释放内存。