在类之间传递类指针

原创 2001年07月10日 21:00:00

 

 

在类之间传递类指针
在程序中,有的类如 CMySocket 类中,有事件如 OnReceive, OnConnect 等,需要在其响应时调用其它类的成员函数。而 CMySocket 类没有其它类的指针,所以需要将其它类的指针传人进来。

示例:
在CMyDialog类中创建了CMySocket类的实例 CMyDialog::m_Socket, 并有成员函数 MyDialog::OnReceiveData. 现在需要在 CMySocket 类的
CMySocket::OnReceive 中调用 MyDialog::OnReceiveData, 即为收到数据时自动调用 MyDialog::OnReceiveData.

解决方法:
1.改写 CMySocket 的构造函数,CMySocket::CMySocket(CMyDialog * mydlg)
2.在 CMySocket 的头文件中加入 #include "MyDialog.h"
3.在 CMyDialog 类中定义一个 CMySocket 类的指针 CMySocket * m_cSocket.
4.由于在 CMyDialog 中不能加入 #include "MySocket.h" 因为那样会引起两个类头文件的 嵌套调用,于是在 CMyDialog 中定义一与 CMySocket 同名的空类 class CMySocket;
5.在 CMyDialog.cpp 中加入 #include "CMySocket.h" 并对 m_cSocket 进行初始化,m_cSocket = new CMySocket(this)。 在这里,new将调用CMySocket的构造函数。
通过这几步,可以成功的将 CMyDialog 的指针传给了 CMySocket.

代码如下:
------------- MySocket.h -----------------
#include "MyDialog.h"                                //加入类 CMyDialog 的头文件
class CMySocket : public CAsyncSocket
{
public:
 CMySocket (CMyDialog * dlgwnd);              //修改构造函数,以便将 CMyDialog 指针传入。
 virtual ~CSocket_Rec();
};
-------------------------------------------

------------- MyDialog.h ------------------
class CMySocket;                                      //为防止类头文件的 嵌套调用,定义一个class CMySocket                                        类。

class CMyDialog : public CDialog
{
public:
 void OnReceiveData();
private:
 CMySocket * m_pSocket;                        //定义 CMySocket 类型的成员变量
}
--------------------------------------------

------------- MyDialog.cpp -----------------
#include "CMySocket.h"                                //加入类 CMySocket 的头文件,使下面的 new 会调用 CMySocket 的构造函数.
BOOL CSocket_ReceiveDlg::OnInitDialog()
{
     m_cSocketRec = new CSocket_Rec(this);           //在此new会调用CMySocket 的构造函数.
}
--------------------------------------------

以上问题,也可以通过设全局变量解决,但从封装的角度来看,这种方法相对好一些。

版权声明:本文为博主原创文章,未经博主允许不得转载。

通过DLL导出类指针来传递及使用对象

开发DLL是windows编程中经常用到的一种技术。d
  • dragonno1
  • dragonno1
  • 2014年04月07日 17:50
  • 1130

如何传递类成员函数的指针

需求: 在类A里面,有一组规格相同的函数; 类B中有一个成员F为A中成员函数的指针,在构造B对象时对该成员F进行初始化,然后在Do函数中调用此函数指针所对应的函数。 为实现这个目的,需要怎么做...
  • henan_lujun
  • henan_lujun
  • 2013年05月23日 14:03
  • 820

不同类之间数据的传递的方式

不同类之间经常涉及到数据的传递,游戏中,比如2个界面等,开始我不太熟悉,有时还用静态变量去传递数据,感觉很可笑,意识到自己面向对象思想掌握的很一般般。 其实最好的办法还是通过构造方法的参数去传递数据!...
  • themagickeyjianan
  • themagickeyjianan
  • 2016年01月25日 11:16
  • 1050

C++类的数据传递

初写Qt 编程的时候,两个窗口之间的数据传递
  • DKH63671763
  • DKH63671763
  • 2014年05月15日 09:28
  • 882

Qt类内部有一个该类类型指针

这个指针是私有的,其他类访问不到,可以通过这个指针对类做一些设置。
  • qq_24815615
  • qq_24815615
  • 2017年04月21日 22:27
  • 316

C++类与类之间数据的传递

前几篇博文中的main.cpp,Tiger.cpp,Rat.cpp,Ox.h,Tiger.h,Rat.h 中(这六个文件构成一个完整的工程),如果我想在类 Tiger 中的TransformData(...
  • zhuanghuimei2008
  • zhuanghuimei2008
  • 2013年12月10日 13:16
  • 1106

关于DELPHI中的类对象以及类指针简单探讨总结。

      最近用DELPHI写程序,发现了DELPHI类对象引用时,有个需要特别注意的地方,故总结如下,与大家分享。有讲的不对的地方,还请不吝斧正。              首先:我们定义一个类,...
  • wbcp2000
  • wbcp2000
  • 2006年11月15日 15:30
  • 2285

Java类之间的数据传递3中方法。

1.若是不变的常量可用接口interface,在接口中定义然后几个类就可以共用了。 2.如果是类之间传递变量有两种方法,假如类A调用类B的一个属性,类B的长像如下: class B {   pu...
  • baidu_30204381
  • baidu_30204381
  • 2015年07月30日 10:12
  • 494

在MFC中使用一个单独的类实现数据在各个类之间的传递

第一步:使用VS2010创建一个基于MFC的单文档程序,然后  编译 运行 确定没有问题。 第二步:添加一个名叫CGszCommonData 派生自 CWinApp的类。 解释说明:由于我们很...
  • wenluderen
  • wenluderen
  • 2015年01月22日 16:32
  • 2905

进程外组件 数据传递 指针传递

我们知道进程都有自己的进程空间,都有自己的起始地址,因此在一个进程中的指针在另外一个进程中是无效的,一般在一个进程中的使用的地址类型的指针在进程之间传递时是 不能使用的,经过笔者测试,如果我们传...
  • CNHK1225
  • CNHK1225
  • 2016年02月26日 16:53
  • 920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在类之间传递类指针
举报原因:
原因补充:

(最多只允许输入30个字)