首页 新闻 会员 周边

函数指针的传递的两种方式) 运行通过,但我不知原理,大家可否讨论看看

0
悬赏园豆:10 [待解决问题]
(函数指针的传递的两种方式) 运行通过,但我不知原理,大家可否讨论看看.

运行的结果是:

I am function_One_Instance
I am function_Second_Instance

下面是原代码:

#include <windows.h>
#include <stdio.h>

class CTestFun
{
public:
// 测试函数
void testFunction(void)
{
// 方法一的使用
function_One_User((PFunction_One)function_One_Instance);
// 方法二的使用
function_Second_User(&CTestFun::function_Second_Instance);
}

protected:
// ================================法一:====================================
// 函数类型定义
typedef void function_One();
typedef function_One *PFunction_One;
// 函数实例
static void function_One_Instance()
{
printf("I am function_One_Instance\n");
}
// 函数使用者
void function_One_User(PFunction_One function)
{
function();
}


// ================================法二:=====================================
// 函数类型定义
typedef BOOL (CTestFun::*function_Second)(int);
// 函数实例
BOOL function_Second_Instance(int candidate)
{
printf("I am function_Second_Instance\n");
return TRUE;
}
// 函数使用者
BOOL function_Second_User(function_Second function)
{
if ( (this->*function)(1) == TRUE )
return FALSE;
return TRUE;
}

};



int main()
{
CTestFun testFun;
testFun.testFunction();
system("pause");

return 0;
}
==========================================================
对于上面列出的代码,我的问题是:
1、把
  if ( (this->*function)(1) == TRUE )
  改为
  if ( (/*this->*/*function)(1) == TRUE )
  就会报错:
  error C2171: “*”: “CTestFun::function_Second”类型的操作数非法
  error C2064: 项不会计算为接受 1 个参数的函数
2、
  若改为
  if ( (/*this->**/function)(1) == TRUE )
  就会报错:
  error C2064: 项不会计算为接受 1 个参数的函数
  这是为什么呢? 为什么一定要加this.
3、BOOL function_Second_User(function_Second function)
  中的形参是函数指针而已。
  而调用的时候为什么是
  function_Second_User(&CTestFun::function_Second_Instance); (加了& ,即函数的指针的指针)
4、 void function_One_User(PFunction_One function)
  中的形参是函数的指针的指针,
  而调用时为什么是
  function_One_User((PFunction_One)function_One_Instance);
  只是函数指针?
soloman1986的主页 soloman1986 | 初学一级 | 园豆:189
提问于:2012-06-06 09:32
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册