c/c++语言开发共享指向函数的指针与指向函数的引用

“` // // main.cpp // 函数指针 // Created by mac on 2019/4/9. // Copyright © 2019年 mac. All rights reserved. // 函数指针的定义:double ( f) (double) ,f是一个指向函数的指针, …

// //  main.cpp //  函数指针 //  created by mac on 2019/4/9. //  copyright © 2019年 mac. all rights reserved. //  函数指针的定义:double (*f) (double) ,f是一个指向函数的指针,该函数带有一个double类型的参数,而且会返回一个double的值。 //  函数引用的定义:double (&f) (double), f是一个指向函数的引用,该函数带有一个double类型的参数,而且会返回一个double的值。 //  *f外面的括号是必须添加的,因为()的优先级要高于* //  不添加(),导致的后果就是返回的是一个指向double值的指针。 //  除了函数指针指针以外,有没有函数引用?其次就是运算符重载的知识,看一下哪一些的运算符是支持重载的。  #include <iostream> #include "cmath" using namespace std;  double f(double x){     return 2*x; }  double sum(double (*f)(double),int n,int m){     double result=0;     for (int i=n; i<=m; ++i) {         result+=f(i); // result+=(*f)(i); 这才是正确的写法,f(i)是简写,两种方式都能正确的编译运行。     }     return result; }  //测试下函数引用 double sum(double (&f)(double),int n,int m){     double result=0;     for (int i=n; i<=m; ++i) {         result+=f(i);     }     return result; }  template <class gentype> gentype g(gentype a) {     return 2*a; }  template <class gentype> gentype s(gentype (*f) (gentype),int n,int m) {     gentype result = 0;     for (int i=n; i<=m; ++i) {         result+=f(i);     }     return result; }  int main(int argc, const char * argv[]) {     cout<<sum(&f,1,5)<<endl; //直接写成 sum(f,1,5);也是可以的,结果不会变。     cout<<sum(g<double>, 1, 5)<<endl; //这地方直接写成函数模版也是没有问题的。     cout<<s<double>(g<double>,1,5)<<endl; //在一个函数模版中调用另一个函数模版     cout<<sum(f, 1, 5)<<endl;  //定义的函数引用也是对的。     cout<<sum(sin, 3, 7)<<endl; //调用其他符合f函数原型的函数,注意添加相应的头文件。     return 0; } 

运行结果

30 30 30 30 -1.19704 program ended with exit code: 0

tips

  • 指向函数的指针与指向函数的引用其本质都是一样的。
  • 指向函数的指针也支持指向函数模板的指针。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/604351.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐