C++中类成员函数指针使用方法

1. 指向类非静态成员的函数指针

声明: 指向类的成员函数的指针需要在指针前面加上类的类型,格式为:

typedef 返回值 (类名::*指针类型名)(参数列表);

赋值: 需要用类的成员函数地址赋值,格式为:

指针类型名  指针名 = &类名::成员函数名;

注意:赋值时&符号必须要加:不加&编译器会认为是在调用类的成员函数,所以需要给出参数列表,否则会报错;加&编译器才认为是要获取函数指针。

调用: 调用类对象.*; 调用类指针->*,格式为:

类对象: (类对象.*指针名)(参数列表);

类指针: (类指针->*指针名)(参数列表);

代码示例:

#include <string>
#include <iostream>

using namespace std;

class MathCalculation
{
public:
    int add(int a,int b) //非静态函数
    { 
        return  a + b;
    }
};

typedef int (MathCalculation::*FuncCal)(int,int);

int main()
{
    FuncCal funAdd = &MathCalculation::add;
    MathCalculation * calPtr = new MathCalculation;
    int ret1 = (calPtr->*funAdd)(1,2);  //指针调用

    MathCalculation cal;
    int ret2 = (cal.*funAdd)(3,4);  //对象调用

    cout << "ret1 = " << ret1 << endl;
    cout << "ret2 = " << ret2 << endl;
    return 0;
}

2. 指向类静态成员的函数指针

类的静态成员函数和普通函数的函数指针的区别在于,他们是不依赖于具体对象的,所有实例化的对象都共享同一个静态成员,所以静态成员也没有this指针的概念。指向类的静态成员的指针就是普通的指针。非static的member function存在this指针,调用时需要传入该对象的地址,成员函数操作的是对象的数据。

#include <string>
#include <iostream>

using namespace std;

class MathCalculation
{
public:
    static int add(int a,int b) //静态函数
    { 
        return  a + b;
    }
};

typedef int (*FuncCal)(int,int);

int main()
{
    FuncCal funAdd = &MathCalculation::add;
    MathCalculation * calPtr = new MathCalculation;
    int ret1 = (*funAdd)(1,2);
    int ret2 = funAdd(3,3);

    cout << "ret1 = " << ret1 << endl;
    cout << "ret2 = " << ret2 << endl;

    return 0;
}

综上所述:

  • 类的静态成员函数,使用函数指针和普通函数指针无区别
  • 类的非静态成员函数,使用函数指针需要加类限制

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值