函数指针的应用(2007-06-27)
来源:互联网 发布:当当阅读器知乎 编辑:程序博客网 时间:2024/05/01 23:33
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;
}
/*代码段*/
/*全局函数指针定义*/
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;
}
- 函数指针的应用(2007-06-27)
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 函数指针的应用
- 指针的函数的应用
- 函数指针的典型应用
- [C++] 函数指针的应用
- 函数指针的经典应用
- 【QTP】函数指针的应用
- 函数指针的应用2
- 函数指针的经典应用
- 函数指针数组的应用
- 同学走了,我的心很承重,一位才子就这么远去了,他远离我们而去,为他的离去而悲...
- Cobra —— 迈进Ajax时代
- Visual Studio 2005 SP1集成(整理前辈版本)
- MPC暴风影音清空播放历史记录
- 窦性心律不齐
- 函数指针的应用(2007-06-27)
- 七夕情人节,祝天下有情人终成眷属
- java虚拟机类的加载顺序
- 变量
- JS等比例缩放图片
- 上拉电阻下拉电阻的总结
- 电平转换总结(ZZ)
- problem 1107
- 方法和变量在继承时的覆盖与隐藏--摘抄JDK实例宝典