VC++类之间的数据传递问题(高分求解!)
我现在碰到一个问题,大家看看怎么解决好:首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。现在有两个父类,CFather1,CFathe...
我现在碰到一个问题,大家看看怎么解决好:
首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。
现在有两个父类,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两次??
非常晕,新手基础不好,望大家详细指教!一定要详细啊,我解决了这个问题就再给追加50分! 展开
首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。
现在有两个父类,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两次??
非常晕,新手基础不好,望大家详细指教!一定要详细啊,我解决了这个问题就再给追加50分! 展开
4个回答
展开全部
父类两个一模一样的函数的时候调用这个函数的时候用::比如
CFather1::OnRecevice或CFather2::OnRecevice。
假如你重载了这个函数,当你重载函数的时候和你重载哪一个已经没关系了,它只调用你重载的那个。
当你传递的参数符合重载后的OnRecevice,这时候编译没问题!
你要传递数据就把数据放到一个静态变量当中去 static!这时候这个变量在哪都能用!
CFather1::OnRecevice或CFather2::OnRecevice。
假如你重载了这个函数,当你重载函数的时候和你重载哪一个已经没关系了,它只调用你重载的那个。
当你传递的参数符合重载后的OnRecevice,这时候编译没问题!
你要传递数据就把数据放到一个静态变量当中去 static!这时候这个变量在哪都能用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我自己的建议,在用Socket网络传送的时候,最好用原始的api,不要用mfc里封装好的类,它本来就是帮你封装的很好用,但用的糊里糊涂的不知道原理了,你现在又封装的两层,这样一来必定会影响你的传送速度,所以你还是回到最原始的api函数上,等你做好的时候,你会感觉很清楚,而且你会发现,你的程序传送速度很快。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用谁的就在函数前加谁的类名,然后加四个点就可以了。子类里完全不用定义父类的变量了,因为子类继承父类特性,那些函数可以直接拿来用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想你可以在两个父类中各自定义一个虚函数,父类在得到数据后调用它.在child中重新实现那两个需函数即可.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询