失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C++中类成员函数指针使用方法

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

时间:2024-04-17 08:22:51

相关推荐

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;}

综上所述:

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

如果觉得《C++中类成员函数指针使用方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。