我现在碰到一个问题,大家看看怎么解决好: 首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。
现在有两个父类,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两次?? 非常晕,新手基础不好,望大家详细指教!
现在有两个父类,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两次?? 非常晕,新手基础不好,望大家详细指教!
解决方案 »
- BasicExcel读取Excel崩溃!!!
- KillTimer是不是可以重复对某一定时器执行
- 怎么把自己编写的类做成动态连接库(.dll)?
- 用Visual CHM 制作帮助文件时,总出现打开 ***.hhc文件失败的错误,在线等各位的帮助
- 关于ADORECORDSET 查询
- 我用InstallShield制作安装程序时,想在注册表里添加一个KEY,怎么不行啊。
- 请问区域Region的格式是怎样的?
- 在windows98或2000里,怎么手工注册一ocx,是否regsrv32
- 如何任意修改对话框或者其中的任何一个或多个控件的BkColor、TextColor等
- 关于回调函数的问题
- MFC连数据库查询的结果在哪里显示好
- 有谁用过gdi+
最好不要这样做,因为我要在CChild里把从CFather1和CFather2拿到的数据统一做处理后再传给主程序。
这个可用的办法很多,不一定要同时继承两个class个人意见: 有些技术环节,能不用就不用(如CView,双继承,com)
1,你那个CFather1和CFather2其实是同一个功能块的,你的函数又是虚函数,没必要用两个类。
2,子类从父类继承了所有公有和保护的方法和数据,你直接用子类去做就行了。
3,面向对象的话,其实不会这么做。
a,你只需要定义一个CFather1,然后派生出2个对象来接收数据。
b,做数据处理的功能和接受收据的功能不要混在一块,单独拿出来,所以不建议从CFather1继承,因为完全没关系。你只需要new一个内存接受数据,接到数据后,把Buf指针传给CChild做处理就行了,处理完了释放内存。