C++-------定义函数类型

函数重载和函数指针
  int func(int a,int b)
  {
  cout<<"func"<<endl;
  return 0;
  }
  int func(int a,int b,int c)
  {
  cout<<"func(int,int,int)"<<endl;
  return 0;
  }
  //1.定义一种函数类型
  typedef int(MY_FUNC)(int ,int);     //定义MY_FUNC的函数类型,返回值是int,参数列表是int

  //2.定义指向这种函数类型的指针类型
  typedef int(*MY_FUNC_P)(int,int);

  int main(void)
  {
    //1.
    MY_FUNC *fp=NULL;
    fp=func;
    fp(10,20);

    //2.
    MY_FUNC_P fp = NULL;
    fp=func;
    fp(10,20);

    //3.
    int(*fp1)(int,int)=NULL;    //常用   (在这一步已经发生重载)
    fp1=func;    //若有对func()函数重载,fp1->func(int,int)函数(参数类型个数匹配)
    fp1(10,30);
    fp1(10,30,20)  //错误,fp1已经是指向了func(int,int)函数
    //三个参数的函数同理
  }
  在给函数指针赋值的时候,发生函数重载匹配
  在调用函数指针的时候,所调用的函数已经固定

  所以函数重载与函数类型的函数重载主要区别在于,一般的函数重载发生在函数调用的时候
  而函数类型的函数重载发生在给函数指针赋值的时候

  //指向函数类型指针的格式
    返回值类型(*指针名)(参数列表)=NULL;
    如:int(*fp)(int,int)=NULL;

  //自定义函数类型
    typedef int(MY_FUNC)(int ,int);
    同样,返回值类型(函数类型名)(参数列表)

原文地址:https://www.cnblogs.com/god-for-speed/p/10924495.html

时间: 2024-10-03 01:47:14

C++-------定义函数类型的相关文章

typedef定义函数类型或函数指针

转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); 然后可以用这个类型定义一个指针,这个指针指向一个函数,具体redis中使用如下(具体redis的源码解析,后面的文章中还会提到): ae

回调函数的本质,就是把函数当作参数(首先要定义函数类型)

//把一个方法当作另一个方法的参数, 就是回调方法, 大家习惯称作回调函数 type   TFunType = function(i: Integer): Integer; {声明一个方法类型} function MyFun(i: Integer): Integer;        {建立类型兼容的函数} begin   Result := i*2; end; {把函数当作参数, 再定义一个函数} function MyTest(x: Integer; F: TFunType): Integer

函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

函数指针是指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的.函数指针有两个用途:调用函数和做函数的参数. 1 #include<stdio.h> 2 int max(int

TypeScript入门三:TypeScript函数类型

TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明TypeScript类型变量已经做了初步的解析,这里先回顾以下: 1 //声明函数 2 function add1(x:number,y:number):number{ 3 return x+y; 4 } 5 6 let add2 = function(x:number,y:number):number

go函数类型

1.什么是go的函数类型呢? go的函数类型定义:用type +函数类型名 (输入类型)(输出类型),代表一类的函数 //函数类型,函数本身也是一种数据类型 func Minus(a, b int32) int32 { return a - b } func Add(a, b int32) int32 { return a + b } //定义函数类型 ,通过type给函数类型起名 //FuncType它是一个函数类型 type FuncType func(int32, int32) int32

用typedef定义函数指针类型(转)

typedef可以用于定义函数指针类型: [语法]typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表) [用途]1.可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了:2.有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用. [示例] 例1:typedef void (*PF)(int x);

Entity Framework 6 Recipes 2nd Edition(11-5)译 -&gt; 从”模型定义”函数返回一个匿名类型

11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型,如Figure 11-5所示. Figure 11-5. A model for hotel reservations 想要返回每位游客房间预订条数和带来的总收入.因为很多地方需要这些信息,所以想要创建一个”模型定义”函数,接受一个查询参数,返回一个包含游客合计信息的匿名类型的集合: 2. 把Li

Python定义函数时,不同参数类型的传递

python的底层是通过C语言实现,因此参数调用时是通过地址传递的(和C语言一样,值是单向传递,指针才能实现双向传递),比如: # -*- coding: utf-8 -*-def f1(x,y): z=x+y y=x return z a= 1 b=2 c=f1(a, b) print c, a, b 得到的结果是 3 1 2 从这里可以看出b值并没有变化,也就是说值是单向传递的. 函数的定义时,参数可以是数值,列表(当元组处理),字典等,其参数定义形式如下: def f(a, *pargs,

swift学习之函数类型

var someInt: Int = 7 Int 就是表示someInt的类型,同理,这个Int也可以换成函数类型,所以也可以像其他类型那样使用函数类型 函数类型主要由三种用途:(一)就是上面说的了 (二)作为参数(三)作为返回类型 再加一个,就是函数也可以嵌套(nested) let math: (Int , Int) -> Int = addTwoInts printMathResult(math, a: 9, b: 9) //printMathResult(math, 9, 9) func