VC++令人迷惑的几个问题。。。

    有一年多没有弄VC++了,近来想做一个小软件,重新拿了起来,却发现自己越来越对它不熟悉了。做了将近两年的NET开发,对VC++这种模式还真的不太适应了。。。发现了一些问题,弱弱的问题,希望大家多多指教。。。。。。

    对于CSocket 类,大家一般怎么使用? 定义一个 CSocket 类的对象:

    CSocket ss;

然后就可以用这个对象来做事了,比如调用它的Send()方法发送数据,调用它的其它方法来进行我们要做的事情。现在问题出来了,我要用这个对象与别人进行通信,当别人发送信息给我这个套接字时,ss对象如何来接收这些信息。我们知道,CSocket类有一个 Receive()方法,可以用它来接收对方发来的信息。

问题是,我们什么时候调用Receive()方法来接收对方发来的信息。我们知道CSocket有个虚函数 OnReceive(),我们必须依靠这个虚函数来通知我们,什么时候调用Receive()方法接收信息。

    这个虚函数,是要我们来重写的,否则Receive()这个方法没有地方可写。。。。看了别人N多的程序,大家都这是么写的:新建一个类,如CMySocket,这个类继承CSoket。并且在这个类里面新建一个指向程序主对话框的指针,(在CMySocket的构造函数里,初始化这个指针)。然后在CMySocket里重写OnReceive()这个虚函数,并且在OnReceive()里调用主对话框的一个函数,如主对话框的 OnReceive(),在主对话框中,编写我们的具体接收信息的方法。。。。。

    对于这种访式的调用,本人十分迷惑。。。。。。

1.  既然CSocket MFC封装好的一个类,为什么我们不能直接使用这个类进行网络连接,接收数据,而必须自己继承这个类,用继承的类来构造自己的对象。

可不可以,直接用CSocket,而不用继承它,来实现上面的功能呢?

2.  我们用CMysocket继承了CSocket,并且我们在CMysocket类里面,保存了一个指向主对话框的指针,以便在重写Onreceive 时,调用主对话框的OnReceive函数。这样一来,我们的这个CMySocket类与主对话框,是紧密联系在一起的,它们有很强的偶合关系。

这样,这个CMysocket类就只能在主对话框内使用,如果我们新建了另外一个对话框,在这个对话框内我们也需要Socket连接,那么就不能用CMySocket这个类。

而且还有一个问题,假如,我们在主对话框内,要定义两个套接字对象,而且这两个对象在接收数据时,都有不同的操作。那么我们就不能把这两个对象都定义成CMySocket,因为这两个套接字对象的OnReceive事件里面所做的事情是不同的,它们不能共用同一个类的同一个函数。(当然我们可以想一些其它办法来解决这个问题,比如,在CMySocket里面添加一个字段 m_name,给每一个定义的对象取一个名字,这样在OnReceive()里面根据名字来做不同的事情)

 

好了,跟据上面的论述,我们可以将它总结为:要使用CSocket 这个类,我们必须继承它,将它继承为CMysocket;如果我们的程序里使用到了多个套接字,而且这些套接字在接收数据时都要做不同的事情,那么我们就必须将CSocket继承为CMysocket1CMysocket2CMysocket3。。。。。。也就是一个类如CMysocket只能定义一个象。。。。。

在面向对象里,这是多么可笑的结论,CSocket类是一个类,我们不能用它来做事情(除了继承它)!

                                  CMySocket是我们继承CSocket的一个类,我们不能用它来定义多个对象!如果我们想定义多个对象,我们必须为这些对象写n多个类。。。。。。。

这不是很荒唐吗?

期等高手正解!

等待中。。。。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值