一般函数指针与成员函数指针

  函数指针,顾名思义,指向函数的指针。

  C++中函数指针的声明形式为: void (*pfn)()

  C++中函数指针的赋值:pfn=funName 或 &funName

  C++中函数指针的使用:pfn() 或(*fun)()

  看到了上面的赋值跟使用的时候,我们不禁会产生疑问,为什么指针的赋值可以用函数名?又可以用取地址的形式赋值呢?为什么可以通过指针可以直接调用函数呢?指针不是需要解引用才能访问指向的内容吗?这个我表示也暂时不理解编译器编译的时候的具体赋值细节。不过这里我们可以先把函数名,当作数组名理解,希望有理解的人可以解释出来。

上面我们看到的是一般的函数指针,但是因为C++支持面向对象

,所以就多出来一个指向具体类的成员函数指针,简称为成员函数指针,下面我也从定义与赋值,再到使用来讲解。 成员函数指针

  声明: void (ClassName::*pfn)()

  赋值: pfn=&ClassName::fun;

  使用:(对象指针->*pfn)();

  赋值的时候需要强调只能通过这一种方式赋值, 即&(类名::函数名),注意,这里不能用this->fun 来赋值,因为c++编译器对this->fun 实际上是在函数参数中加入了this指针,指向该对象  fun(ClassName *this)。使用的时候需要注意的是,对成员函数的调用通过对象来完成,同样,对成员函数的指针的调用同样需要借助对象.(对象指针->*pfn)();这样就完成的对成员函数的调用。那么想想如果是静态的成员函数指针怎么调用呢?

class X
{
public:
    static void display();
    bool getValue();
};

typedef void (*pf)();
pf p=X::display;
(*p)();  //或p();
时间: 2024-10-11 01:52:41

一般函数指针与成员函数指针的相关文章

【C++】const、volatile不能修饰没有this指针的成员函数

一般所有的成员函数都只有一个复本,当不同的对象调用成员函数时,为了区分是哪个成员在调用,会传入this指针. 当调用有const.volatile修饰的成员函数时,会相应的传入一个const.volatile修饰的this指针. 故const.volatile不能修饰没有this指针的成员函数. 如:const.volatile不能修饰static成员函数

C/C++ 类成员函数指针 类成员数据指针

普通函数指针:  "return_type (*ptr_name)(para_types) " 类成员函数指针: "return_type (class_name::*ptr_name)(para_types)" 类数据成员指针: "type class_name::* ptr_name"; C/C++: 1 class Demo 2 { 3 public: 4 Demo():data(100) 5 { 6 7 } 8 int data; 9 i

类 this指针 const成员函数

C++ Primer 第07章 类 7.1.2 ?Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <string> #include <iostream> class Sales_data { public: std::string isbn() const {return bookNo;} Sales_data& combine(const Sales_data&); dou

《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数

// 构造函数赋值 CTyre(int r, int w):radius(r), width(w) { } 初始化列表 #include<iostream> using namespace std; /*成员对象和封闭类 成员对象: 一个类的成员变量是另一个类的对象 包含 成员对象 的类叫 封闭类 (Enclosing) */ class CTyre { private: int radius; int width; public: CTyre(int r, int w) :radius(r)

【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a = a; this->b = b; } //成员函数 Test &Gadd2(Test &t2) { this->a = this->a + t2.a; this->b

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

【转】C++ const成员变量和成员函数(常成员函数)

转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击<C++初始化列表>回顾. const成员函数(常成员函数) const 成员函

类 this指针 const成员函数 std::string isbn() const {return bookNo;}

转载:http://www.cnblogs.com/little-sjq/p/9fed5450f45316cf35f4b1c17f2f6361.html C++ Primer 第07章 类 7.1.2 ?Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <string> #include <iostream> class Sales_data { public: std::string isbn

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

测试这个功能的初衷是测试boost里面的bind boost::bind((&A::sum), &a, _1, _2) 上面的代码是我boost bind及多线程这篇博客里面的一行代码.我就想boost是怎么做到这样调用一个类的成员函数的.其实成员函数和全局函数无非就是差一个this指针参数.给传进去不就也可以调用了.然而并没有那么简单.看了boost的源码表示太长了.没怎么看懂 然后就自己写代码测试了一下.还用了汇编.. 代码参考  http://www.cppblog.com/woai