C++函数指针与成员函数指针

C++函数指针与成员函数指针既然是函数指针 那么肯定与普通函数有关联的 即返回值以及函数的参数列表与普通函数一致 成员函数指针与函数指针有一些区别 函数指针构造的函数是全局区域的 而成员函数指针构造的函数是属于类作用域的

大家好,欢迎来到IT知识分享网。

1、函数指针

函数指针:即可以指向函数地址的指针,经常被用作函数参数,作为回调函数使用。

既然是函数指针,那么肯定与普通函数有关联的,即返回值以及函数的参数列表与普通函数一致。

假设我们构造一个a+b返回c的一个函数,我们对此构造一个指向他的函数指针。

int sum(int a,int b) { return a + b; } // 指向sum的函数指针 int (*pfunc)(int, int) = ∑

为了方便起见,我们会将函数指针构造成一个函数指针的类型。

// 构造一个类型为pfunc_ptr的函数指针类型 typedef int (*pfunc_ptr)(int, int); // 指向一个函数 pfunc_ptr ptr = ∑ // 不用&也是可以的

测试例子

#include "stdfax.h" /* global function */ int sum(int a,int b) { return a + b; } int pro(int a, int b) { return a * b; } double half(double d) { return d / 2.0; } double twice(double d) { return d * 2.0; } extern void start_test(); void test_global_func() { //int sum(int, int); //int pro(int, int); int (*pfunc)(int, int) = ∑ pfunc = &pro; // this is the proper way of function assignment pfunc = pro; // this is allowed //double half(double); //double twice(double); // dfunc is called function pointer variable double (*dfunc)(double) = ½ dfunc = twice; cout << dfunc(10) << endl; typedef int intg_t; intg_t a = 5; double(*pd)(double); pd = ½ typedef double (*pdptr_t)(double); pdptr_t pdd = &twice; pdd = half; } int main() { int (*pfunc_ptr)(int a, int b); pfunc_ptr = ∑ int a = pfunc_ptr(1, 2); std::cout << "a = " << a << endl; pfunc_ptr = &pro; int d = pfunc_ptr(3, 4); std::cout << "d = " << d << std::endl; start_test(); return 0; }

2、成员函数指针

成员函数指针与函数指针有一些区别,函数指针构造的函数是全局区域的,而成员函数指针构造的函数是属于类作用域的。

我们可以仿照函数指针来构建成员函数指针。

int (Vector::*pmemfunc_ptr)(int , int ); pmemfunc_ptr = &Vector::sum; // 必须使用取地址符 // 调用的时候必须使用类成员变量来调用 Vector vec; int ret = (vec.*pmemfunc_ptr)(3,4); // 调用成员函数指针所指向的函数sum

测试例子

#include "stdfax.h" class Vector { public: int sum(int a, int b); int pro(int a, int b); }; // Vector::sum means that "sum belongs to vector" int Vector::sum(int a, int b) { return a + b; } int Vector::pro(int a, int b) { return a * b; } void start_test() { // member function pointer valiable int (Vector::*pmemfunc_ptr)(int a, int b); pmemfunc_ptr = &Vector::sum; Vector v; int a = (v.*pmemfunc_ptr)(1, 2); cout << "a = " << a << endl; pmemfunc_ptr = &Vector::pro; int d = (v.*pmemfunc_ptr)(3, 4); cout << "d = " << d << endl; }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/189569.html

(0)
上一篇 2025-10-03 09:26
下一篇 2025-10-03 09:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信