函数指针与成员函数指针

原创 2007年10月08日 17:50:00

函数指针与成员函数指针

(一)简单的函数指针的应用。
//
形式1:返回类型(*函数名)(参数表)
char (*pFun)(int);
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
第一行定义了一个指针变量pFun。首先我们根据前面提到的形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址。
然后就是可爱的main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFunmain()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2
(二)使用typedef更直观更方便。
//
形式2typedef 返回类型(*新类型)(参数表)
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
typedef
的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。
(三)在C++类中使用函数指针。
//
形式3typedef 返回类型(类名::*新类型)(参数表)
class CA
{
public:
char lcFun(int a){ return; }
};
CA ca;
typedef char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
pFun = CA::lcFun;
ca.(*pFun)(2);
}
在这里,指针的定义与使用都加上了类限制对象,用来指明指针指向的函数是那个类的这里的类对象也可以是使用new得到的。比如:
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;
而且这个类对象指针可以是类内部成员变量,你甚至可以使用this指针。比如:
CA有成员变量PTRFUN m_pfun;
void CA::lcFun2()
{
(this->*m_pFun)(2);
}
一句话,使用类成员函数指针必须有“->*”“.*”的调用。

 

成员函数指针:(结构+与普通函数指针之间的转换)

通过网上查找发现: zailinux
  • liaoyoujinb
  • liaoyoujinb
  • 2014年07月19日 17:18
  • 970

C++学习之普通函数指针与成员函数指针

函数指针(function pointer)是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生。我最近也被问到了这方面的问题,心中...
  • lisong694767315
  • lisong694767315
  • 2014年08月03日 01:10
  • 2294

C++之指向数据成员的指针和指向成员函数的指针

这里指向数据成员的指针和指向成员函数的指针与指向变量的指针和指向函数的指针进行对比来解释,比较好理解一些。指向变量的指针和指向函数的指针先举个例子:void func(int a, int b){ ...
  • maoliran
  • maoliran
  • 2016年06月02日 20:23
  • 1600

如何使用指向类的成员函数的指针(详解!)

我们首先复习一下"指向函数的指针"如何使用?   void print()   {   }   void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 vo...
  • lishuhuakai
  • lishuhuakai
  • 2014年01月14日 22:13
  • 26733

C++成员变量指针和成员函数指针

深度探索C++对象模型这本书还有提到C++类的成员变量指针和成员函数指针,虽然在实际开发中用的不多,但是还是需要理解下。一:成员变量指针1.1 非静态成员指针类成员变量指针,实际上并不是真正意义上的指...
  • LaoJiu_
  • LaoJiu_
  • 2017年04月01日 18:00
  • 811

类的非静态成员函数指针详解

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块讲解的比较深入详细 推荐阅读 ///...
  • fuyunzhishang1
  • fuyunzhishang1
  • 2015年09月11日 14:02
  • 807

C++ ---------------- 成员函数指针揭秘

1 前言 2 语法 3 与其它语言机制的混合使用 3.1 继承 3.2 虚函数 3.2 多继承 4 实现 4.1 Microsoft的实现 4.1.1 内部表示 4.1.2 Vcal...
  • ym19860303
  • ym19860303
  • 2013年02月18日 10:32
  • 917

笔记八:静态变量、静态成员函数、函数指针、静态函数指针

静态变量http://www.cnblogs.com/dongzhiquan/archive/2009/07/21/1994792.html 一文对静态变量进行了充分的阐述,现整理部分重要内容如下,加...
  • u014033518
  • u014033518
  • 2016年05月23日 21:39
  • 809

类中非静态成员函数中的----this指针

首先思考一下在c++中,编译器是如何识别一个类的? 识别一个类可以分为一下三步? ①识别类名; ②识别数据成员; ③识别成员函数并将其改写。 引出的问题:类中的数据成员相当于全局...
  • qq_34992845
  • qq_34992845
  • 2017年02月15日 23:32
  • 471

c++ 如何把this指针传入成员函数 像全局函数一样调用成员函数

测试这个功能的初衷是测试boost里面的bind boost::bind((&A::sum), &a, _1, _2) 上面的代码是我boost bind及多线程这篇博客里面的一行代码。我就像boo...
  • zzucaicai
  • zzucaicai
  • 2016年05月06日 17:24
  • 1249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数指针与成员函数指针
举报原因:
原因补充:

(最多只允许输入30个字)