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

本文详细介绍了函数指针的应用场景,包括全局或静态函数指针的定义与使用,以及类中函数指针的定义、赋值和调用过程。通过具体实例展示了不同环境下函数指针的正确使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值