C++的重载问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 03:04:39
我现在碰到一个问题,大家看看怎么解决好:

首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。
现在有两个父类,CFather1, CFather2.
这两个类都继承了CAsyncSocket
分别在CFather1和CFather2里重载CAsyncSocket::OnConnect和CAsyncSocket::OnRecevie函数
CFather1要connect到port1端口拿数据,CFather1要connect到port2端口拿数据,IP一样的。
现在有一个子类CChild同时继承CFather1和CFather2。

因为我要在CChild里把从CFather1和CFather2拿到的数据统一做处理后再传给主程序。

现在的问题是如果我在CChild里:
class CChild
{
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::OnConnect和CAsyncSocket::OnRecevie函数
class CFather1: public CAsyncSocket
{
public:
virtual void OnConnect( int nErro

针对你的目的回答你的问题,如果仅仅是为了从同一IP地址的不同端口取数据而派生两个类,再重写四个方法,是否有点杀鸡用牛刀了。
CAsyncSocket对象完全可以完成绑定端口,读取数据等操作。
我的建议:
声明两个CAsyncSocket对象,完成绑定等初始化工作后,新建两个线程用于从同一IP地址的不同端口读取数据,这样只要写一个读取函数(用于创建线程)就可以了。至于数据处理,就是你处理缓冲区的事了。
我觉得这样完全可以用一个函数完成的操作,不必要扩大到类的范围。

……
这不是继承

这个在我看来属于多重继承的问题,你可以搜索下。
一般多重继承需要写明继承那个父类
class child:public A, public B
{
}
child a:
a.A::fun();
a.B::fun();
大概这个样子
但是我觉得继承也不好取得数据,还是用单例

还可以考虑用单例设计模式,两个父类都变成单例,再弄个类也可以直接去取数据。
单例类似于static,可以全局访问

这问题的重点不在重载,而是要传递数据吧? 那就用全局变量好了,static。
也可以重载CChild的构造函数,在构造的时候就得到想要的数据!

class CChild
{
public:
....
private:
CFather1 father1; //类中的成员数据是另一个类的对象
CFather2 father2;
}

这里数类的组合,不是类的继承。

类的组合:类中的成员数据是另一个类的对象,
可以在已有的抽象的基础上实现更复杂的抽象。

继承:
单继承
派生类只从一个基(父)类。
多继承
派生类有多个基(父)类。
多重派生
由一个基类派生出多个子类。
多层派生
派生类又作为基类,继续派生新的类。