C++ 类中使用函数指针

张亚成 2014-09-16 11:14:25
在使用函数指针时候只有这样才能够编译通过,
h文件
#pragma once

class Test
{
public:
Test(void);
~Test(void);
void TestFuncPointer();
void GetAllBomCard(); //炸弹函数
void GetAllLineCard(); //顺子函数
void GetAllThreeCard(); //三条函数
void GetAllDoubleCard(); //对子函数

};

cpp 文件

#include "StdAfx.h"
#include "Test.h"

Test::Test(void)
{
}

Test::~Test(void)
{
}

void Test::TestFuncPointer()
{
//函数指针
typedef void (Test::*pGetAllCardFun)(/*BYTE b*/);

//指针数组
pGetAllCardFun GetAllCardFunArray[4] ;
GetAllCardFunArray[0] = &Test::GetAllBomCard;
GetAllCardFunArray[1] = &Test::GetAllLineCard;
GetAllCardFunArray[2] = &Test::GetAllThreeCard;
GetAllCardFunArray[3] = &Test::GetAllDoubleCard;

}

void Test::GetAllBomCard()
{

}

void Test::GetAllLineCard()
{

}

void Test::GetAllThreeCard()
{

}

void Test::GetAllDoubleCard()
{

}





1, 为什么要取地址?
2,既然是内部使用, 为什么还要使用 GetAllCardFunArray[0] = &Test::GetAllBomCard; Test :: 设置作用域 ?
...全文
374 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
张亚成 2014-09-17
  • 打赏
  • 举报
回复
引用 5 楼 stardust20 的回复:
类的非静态成员函数指针和普通的函数指针,有所区别: 1, 为什么要取地址? typedef void (Test::*pGetAllCardFun)(/*BYTE b*/); 声明的其实是一个指向函数指针的指针,使用时->*、.* 中的*,对映着这边的取地址 2,既然是内部使用, 为什么还要使用 GetAllCardFunArray[0] = &Test::GetAllBomCard; Test :: 设置作用域 ? 类的成员函数指针,需要传送this进行调用,像下面的两个指针是不同的,所以需要显示的设置作用域 typedef void (A::*FUNC)(void); typedef void (B::*FUNC)(void);
谢谢你的回答, 从你的回答跟我在使用过程中出现的现象, 我暂时认为 这个是 在类中使用函数指针的规定吧
赵4老师 2014-09-16
  • 打赏
  • 举报
回复
建议楼主去掉取地址和作用域,看看发生什么异常。
我看你有戏 2014-09-16
  • 打赏
  • 举报
回复
编译器的原因,2008下面估计就不需要
stardust20 2014-09-16
  • 打赏
  • 举报
回复
类的非静态成员函数指针和普通的函数指针,有所区别: 1, 为什么要取地址? typedef void (Test::*pGetAllCardFun)(/*BYTE b*/); 声明的其实是一个指向函数指针的指针,使用时->*、.* 中的*,对映着这边的取地址 2,既然是内部使用, 为什么还要使用 GetAllCardFunArray[0] = &Test::GetAllBomCard; Test :: 设置作用域 ? 类的成员函数指针,需要传送this进行调用,像下面的两个指针是不同的,所以需要显示的设置作用域 typedef void (A::*FUNC)(void); typedef void (B::*FUNC)(void);
张亚成 2014-09-16
  • 打赏
  • 举报
回复
引用 2 楼 palm_m 的回复:
类的使用非常的灵活,lz如果不是单纯的研究语法,完全没有必要这样实现你的逻辑
这个是在别的地方使用的,这边必须这么做, 不然跟别人的无法交互。
张亚成 2014-09-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
建议楼主去掉取地址和作用域,看看发生什么异常。
这么操作的话,会出现编译报错。说是参数列表不对。
palm_m 2014-09-16
  • 打赏
  • 举报
回复
类的使用非常的灵活,lz如果不是单纯的研究语法,完全没有必要这样实现你的逻辑

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧