山野村夫-陈墨 发表于 2019-6-20 12:11

模板函数和函数指针的简单配合

一、废话开始:前几天发现,原来c++还有模板函数和函数指针,所以这个帖子刚开始学c++小伙伴的可以看看,对入门c++的没有意义。
1、 模板函数:好像也叫“类模板”。也就是这个东西:
    template<classa>a    max(a, data, a data2){
    return data>data2?data:data2;
}
    它是干什么的呢 ?举个例子,避免求小数和整数的最大时写两个函数。class a, a可以是double、int 、float,char.
    2、函数指针:指向函数地址的指针。理解为int的指针也行嘛,就这个玩意:#include <iostream>using namespacestd;
int max(int a,intb){
   return a>b?a:b;
}

int main(){
   int(*p)(int,int) = max;//是他是他就是他,函数指针呀
   return 0;
}

二、办事,功能:求整数,小数的最大值、最小值、平均值
#include <stdio.h>
#include <iostream>
using namespace std;

/******模板函数的使用**********/
template <classA>
Amax(A a,A b){
   return a>b?a:b;
}

template <classA>
Amin(A a, A b){
   return a<b?a:b;
}

template <classA>
A age(A a,A b){
   return (a+b)/2;
}
/******模板函数的使用**********/

/******提示字符初始化**********/
char*des[]={"最大值","最小值","平均数",};


int main(){


    inta,b;
    int (*p[])(int ,int ) = {max,min,age}; ///整数的函数指针
/****int :函数的返回类型**********/
/****(*p[]):函数指针数组,存放多个函数 **********/
/**** (int, int ): 函数参数类型 **********/
/****{max,min,age}: 函数指针初始化**********/

    double c,d;///小数的函数指针
    double (*p1[])(double ,double) = {max,min,age};

    while(cin>>a>>b){
      cin>>c>>d;
      for(int i=0; i< sizeof(p)/sizeof(p); i++){
/****sizeof(p)/sizeof(p): 指针中函数的个数**********/
            cout<<des<<": "<<p1(c,d)<<endl;///函数指针的使用
            cout<<des<<": "<<p(a,b)<<endl;
            }
    }
    return 0;

}


三、一点见解:
   就个人而言,指针学得不好,所以对函数指针是敬而远之,了解一点,不怎么使。
但是有些函数库里有这个东西,知道一点,看其他函数也轻松。

wildlifexs 发表于 2019-7-12 00:18

函数指针还是很有用武之地的

山野村夫-陈墨 发表于 2019-7-15 22:50

wildlifexs 发表于 2019-7-12 00:18
函数指针还是很有用武之地的

怎么说?
毕竟C语言或者C++的优点是有指针,但缺点也是有指针,接近底层,但是麻烦啊

1毛钱雪糕 发表于 2019-8-18 14:03

感谢分享!

zyr230 发表于 2019-8-18 18:43

C语言的架构的函数指针是成也指针败也指针

雨落荒原 发表于 2019-8-18 22:19

用好了,很方便的,可以把一堆同类的函数封装成一个,再用一个结构体数组就可以循环调用一个,执行不同的功能了
页: [1]
查看完整版本: 模板函数和函数指针的简单配合