类成员函数指针的用法

 
  在实际工作中需要用到类成员函数指针,结果发现不是那么好用,于是上网查找了一下资料,终于通过了编译。
class TEncFile{
public:
void Fun(char* b){printf("%s\n",b);}
};

//假设我们要通过函数指针调用类TEncFile内部的Fun函数,那么需要定义一个函数指针,格式如下:其中TEncFile::标志着此指针是指向类内部的成员函数。
typedef void (TEncFile::*FUN)(char*); 
//使用的时候比较简单,如下:
FUN fun = TEncFile::Fun;
//因为成员函数的地址是固定的,不需要实例化即可。注意调用的时候,必须要有一个TEncFile的类实例或者对象
TEncFile A;
(A.*fun)("123456"); 
TEncFile* B = new TEncFile();
(B->*fun)("ABCDEF");  
//甚至定义空指针也能够运行,如果在你运行的函数内部没有TEncFile的实例,而实例化的代价太大的话,可以这样:  
TEncFile* p = NULL;
(p->*fun)("hello");
 这里注意,由于.*和->*的优先级比较低,所哟必须用括号把成员函数指针括起来。 下面有详细的实例,使用C++ Builder2009编译通过 
//-------------------------------------------------------------------------- 
//test.cpp 
//--------------------------------------------------------------------------
#pragma hdrstop
#include <tchar.h>
#include <conio.h>
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsusedclass TEncFile;    //预先声明,否则下面一行因为找不到TEncFile的定义而报错。
// 
typedef void (TEncFile::*FUN)(char*);  //声明类成员函数指针

class TEncFile{
	public:
		void Fun(char* b){printf("%s\n",b);}
};
int _tmain(int argc, _TCHAR* argv[])
{
	FUN fun = TEncFile::Fun;  //获取指针	
//          
          TEncFile A;
	(A.*fun)("123456");  //演示 .* 的用法
//
	TEncFile* B = new TEncFile();
	(B->*fun)("ABCDEF"); //演示 ->* 的用法
//	 
          TEncFile* p = NULL; 
	(p->*fun)("NULL Point!"); //空指针也能工作,注意这里不要和 p->Fun("NULL,Point!") 混淆,后者会出错!         
//         
         //注意 .* 和 ->* 的运算级别很低,所以必须用括号,否则编译报错。
	getch();
	return 0;
}  
  //如果还有问题,可以与我联系!
 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值