c++入门之函数指针和函数对象

函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性。函数对象的本质:()运算符的重载。我们通过一段代码来感受函数指针和函数对象的使用:

 1 1 int AddFunc(int a, int b)  
 2  2 {  
 3  3     return a + b;  
 4  4 }  
 5  5  
 6  6 class Add
 7  7 {
 8  8 public:
 9  9     const int operator()(const int a,const int b)
10 10     {
11 11         return a+b;
12 12     }
13 13 };
14 14  
15 15 int main()
16 16 {
17 17     //函数指针
18 18     int (*Add1)(int a,int b);
19 19     int (*Add2)(int a,int b);
20 20     Add1 = &AddFunc;
21 21     Add2 = AddFunc;//两种函数指针赋初值方法
22 22     cout << (*Add1)(3,2)<<endl; // 5
23 23     cout<<Add1(3,2)<<endl;//输出可以加*,也可以不加
24 24  
25 25     //函数对象
26 26     Add addFunction;
27 27     cout<<addFunction(2,3)<<endl;//调用类的重载操作符()方法
28 28     system("pause");
29 29     return 0;
30 30 }

我们可以看到:函数AddFunc和类Add本质上都是实现了对a+b的加法运算。从功能上讲,两者并无区别,但从设计上讲,两者的区别很大,一个将功能封装成函数,一个封装成类。

我们再来关注两种方式下的调用过程:

1  函数指针:

        我们使用函数指针的目的在于:使用指针的方式来调用函数

可能我们之前使用使用指针的场合过少,以至于使得我们忘了指针的强大(我们可以将指针指向任意一种类型,无论是基础类型,还是派生类型,只要指针定义的合理)。既然要使用指针调用函数,首先需要声明一个函数指针(这就如同你要想将一个指针指向整型数据,要先声明一个int*指针),声明了函数指针之后,将该指针指向我们要调用的函数(这就是第20行和21行做的事),函数指针指向了我们要调用的函数,就可以用函数指针来调用函数了(22行的代码)。因此,不管是函数指针还是其他指针,指针的基本使用思想是一致的:

1   定义 和所要指向对象类型相同(这里是函数)的指针(指向对象是什么类型,自己就是什么类型的指针)

2   将指针指向调用对象

3  使用指针的方式代替对象本身执行相应功能。

2  函数对象

      我们使用函数对象的目的在于:使用对象(真正意义上的c++中的对象)的方式来调用函数(是不是和上面很类似)

假如我们先不考虑运算符重载这个层面的东西,仅仅是考虑上层的东西,来思考其中的函数对象的运作机制:

     首先,我们将所要执行的功能封装成了一个类(这个类本质上实现了()运算符的重载),因为我们封装成了类,所以我们可以声明对象;因为这个类本质上实现了函数运算符()的重载,所以我们将这个对象称之为函数对象。也就是,首先,我们基于c++的基本思想(万物皆可对象),将函数封装成了类,然后用该类声明对象,则该对象就是函数对象,使用这个函数对象,我们可以完成函数的调用。   我们来看看函数独享的基本使用过程是:

1  定义 和所要“指向”类型相同(这里是类)的(函数)对象

2  使用函数对象的方式执行相应的功能

我们可以发现:函数对象的使用更加简洁,也更加符合c++的程序设计思想!

原文链接: https://www.cnblogs.com/shaonianpi/p/10523653.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++入门之函数指针和函数对象

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/291379

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午1:38
下一篇 2023年2月15日 下午1:38

相关推荐