函数指针的应用(2007-06-27)

2007-06-27
函数指针的应用
一、全局或静态函数指针
全局或静态函数指针非常简单,也是最为常见的只要函数实体为全局或静态函数就OK
1、函数指针定义
直接定义
typedef void ( *Function)(char* pStr);

Function  m_Function; 
2、函数指针负值
直接负值
m_Function  = test2;
3、函数指针变量的调用
直接负值
m_Function("调用类中静态函数成功!");
二、类中的函数指针
1、函数指针定义
由于在类中的非静态函数中都存在this指针,所以在定义类中使用的函数指针时要定义其所在类名:
typedef void ( CFunction::*Fun)(char* lp_t);
在原指针函数前加上所在类标志"CFunction::",否则将不认为是类中的指针;
在定义函数指针时只需要使用其指针名即可,不需要指定所属类:
ClassFun  m_ClassFun[2];

2、类中的函数指针负值
在vc7.1及以下版本中,于由编译器对编码要求不是很严禁,所以在一般的"类中的函数指针"负值时直接给值即可:
m_ClassFun[0] = test0;
而在vc8版本中,编译器对编码要求比较严格,所以在"类中的函数指针"负值时必须给与制订完整的地址:
m_ClassFun[0] = &CFunction::test0;

3、类中的函数指针变量在类中的调用
由于在类中的非静态函数中都存在this指针,所以在调用类中使用的函数指针时要表现出this指针:
(this->*m_ClassFun[0])("调用类中函数成功!");


/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
/* 代码段 */  
/* 全局函数指针定义 */  
typedef 
void  (  * Function)( char *  pStr);

/* 测试类 */  
class  CFunction
{
public :
 
/* 类中函数指针定义 */  
 typedef 
void  ( CFunction:: * ClassFun)( char *  pStr);

public :
 ClassFun  m_ClassFun[
2 ];  /* 类中指针函数 */  

 Function  m_Function;  
/* 全局或静态指针函数 */  

public :
 CFunction();
 
~ CFunction(){}

 
void  ClassTest();
 
void  Test();

 
void  test0( char *  pStr)
 {
  printf(
" 函数[test0(char* pStr)]->[%s] " ,pStr);
 }

 
void  test1( char *  pStr)
 {
  printf(
" 函数[test1(char* pStr)]->[%s] " ,pStr);
 }

 
static   void  test2( char *  pStr)
 {
  printf(
" 函数[static test2(char* pStr)]->[%s] " ,pStr);
 }
};
/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

CFunction::CFunction()
{
 m_ClassFun[
0 =   & CFunction::test0;
 m_ClassFun[
1 =   & CFunction::test1;

 m_Function  
=  test2;
}

void  CFunction::ClassTest()
{
 (
this ->* m_ClassFun[ 0 ])( " 调用类中函数成功! " );
}

void  CFunction::Test()
{
 m_Function(
" 调用类中静态函数成功! " );
}
/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

int  main()
{
 CFunction Function;
 
/* 执行类中函数指针指向函数 */  
 Function.ClassTest();

 
/* 执行全局或静态函数指针指向函数 */  
 Function.Test();

 
while ( 1 );
 
return   0 ;
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值