首页 > 其他分享 >1.3函数提高

1.3函数提高

时间:2024-03-16 21:12:12浏览次数:23  
标签:10 函数 1.3 int 提高 重载 默认值 void

1、函数默认参数

在C++语法中,函数的形参列表中的形参是可以有默认值的
语法:返回值类型 函数名 (参数 = 默认值){ }
如:void func(int a = 10){ }

注意1:

如果某个位置参数有默认值,那么这个位置往后,从左向右,必须都要有默认值!
如:void func(int a, int b = 10, int c) {}
这是错误的,如果b有默认值,则c也一定要有默认值(因为c在b右边)

注意2:

如果函数声明有默认值,那么函数实现的时候就不能有默认值
void func(int a = 10); //这是个函数声明
void func(int a = 10) { } //这是个函数实现
以上是错误的,函数声明和函数实现不能同时有默认值!

2、函数占位参数

C++函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名(数据类型){}
tips:现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术。

3、函数重载(Overloaded)

3.1函数重载概述

作用:函数名可以相同,提高重复性
函数的名字仅仅是让编译器知道它调用的是哪个函数,而函数重载可以在一定程度上减轻程序员起名字、记名字的负担。

定义:同一作用域的几个函数名字相同但形参列表不同
函数重载满足条件
1、同一作用域下
2、函数名称相同
3、函数 参数类型不同 或者 个数不同 或者 顺序不同

注意:函数的返回值不可以作为函数重载的条件
(不允许两个函数除了返回值类型以外的其他所有的要素都相同!)
如:
void func(int a = 10);
int func(int a = 10);
这俩函数不是函数重载!第二个函数声明错误

3.2调用重载函数

函数匹配(function macting):是指一个过程,在这个过程中我们把函数调用与一组重载函数中的某一个函数匹配起来。
函数匹配也叫重载确定(overload resolution)。

编译器做的事:
编译器首先将调用的实参与重载集合中每一个函数的形参进行比较,然后根据比较的结果决定调用哪个函数。

调用重载函数时有三种可能的结果:
1、编译器找到一个与实参最佳匹配(best match)的函数,并生成调用该函数的的代码。
2、找不到任何一个函数与调用的实参匹配,此时编译器发出无匹配(no match)的错误信息。
3、有不止一个函数可以匹配,但是每一个都不是最明显的最佳选择。此时也将发生错误。称为二义性调用(ambiguous call)。

3.3函数重载注意事项

1、main函数不能重载

2、引用可以作为函数重载条件

3、函数重载碰到函数默认参数
容易出现二义性,编译器报错,应尽量避免出现这种情况出现
如:
void func1(int a);
void func2(int a, int b = 10);
但是在调用的时候却可以
func1(10);
func2(10);
会出现二义性!

标签:10,函数,1.3,int,提高,重载,默认值,void
From: https://www.cnblogs.com/H43724334/p/18077212

相关文章

  • 洛谷P1097 [NOIP2007 提高组] 统计数字
    #先看题目题目描述某次科研调查时得到了n 个自然数,每个数均不超过1.5×109。已知不相同的数不超过 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入格式共n+1 行。第一行是整数n,表示自然数的个数;第 2至n+1 每行一个自......
  • STM32第九节(中级篇):RCC(第二节)——讲解系统时钟配置函数SetSysClockTo72
    目录前言STM32第九节(中级篇):RCC(第二节)——讲解系统时钟配置函数SetSysClockTo72代码内容位置及检索分析代码 代码展示时钟控制使能闪存控制寄存器配置AHP,APB1,APB2的总线时钟配置锁相环时钟 超频操作小结前言    上节课我们讲了理论部分,那么我们这节课......
  • JavaScript操作函数
    JavaScript操作函数通过标签事件触发函数(js),在函数中又返回来对网页中的标签操作在js中如何能够操作网页中的标签在js语言中,认为每一个标签就是一个独一无二的对象,在js语言中可以获得网页中的标签,这样就可以在js中对标签的属性,内容,样式及逆行操作要操作哪个标签,首先......
  • Python疑难杂症(13)---Python的几个比较难理解的内置函数,包括range、zip、map、lambda
    1、range()range(start=0, stop[, step=1])构造器的参数必须为整数(可以是内置的 int 或任何实现了 __index__() 特殊方法的对象)。生成一个start到stop的数组,左闭右开, 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。list(range(6))[0,1,2,3......
  • 指针数组、数组指针、函数指针、指针函数
    数组指针:是指向数组的指针,它还是一个指针,只不过指向数组而已行指针定义形式:int(*p)[10]一定要加(),因为[]优先级高于*,所以必须要(*p)指一行,这里10为列的元素个数例1:二维数组数值为1-12,用行指针定义输出8例2:用行指针传参,2*3数组,输出第二行指针数组:实际是一个数组,长度是......
  • qsort函数[3]---冒泡排序与qsort函数的结合
    冒泡排序与qsort函数的结合首先给大家回顾一下冒泡排序voidbubble_sort(intarr[],intsz){ //确定趟数 inti=0; for(i=0;i<sz-1;i++) { //每趟进行两两互相比较 intj=0; for(j=0;j<sz-i-1;j++) { if(arr[j]<arr[j+1]) ......
  • 函数指针数组(转移表)
    函数指针数组,首先是一个数组,其次其中存储的数据类型是函数指针,所以我们可以通过使用函数指针数组来调用不同的函数。接下来为大家展示他的基本使用方法(模拟计算器)函数指针数组结构   int(*arr[])(intx,inty)={NULL,Add,Sub,Mul,Div};其中NULL,Add,Sub,Mul,Div......
  • 字符串函数与内存函数的使用和模拟实现
    前言:字符函数与内存函数的优劣:字符函数如果处理字符相关的数据的话,用起来比较方便。相较于字符串函数,内存函数可以处理除字符外的其他类型的数据。目录1.字符串函数1.1strcpy1.2strcmp1.3strcat 1.4strncpy  strncmp strncat2.内存函数2.1memcpy 2.2......
  • 如何提高工作/学习效率—管理好网站资源与资料文件
          在日常的学习和工作中,我们经常要利用互联网(百度、博客等),那我们怎么样才能高效快捷的利用好网络资源呢?小编今天在这里为大家分享一下自己的方法,管理好网站资源与资料文件,如有不同见解,恳请指教~        最常用的搜索网站就是百度了,当我们需要使用博客......
  • 滴水逆向笔记系列-c++总结2-36.权限控制-37.虚函数-38.多态_绑定
    第三十六课c++3权限控制1.定义和实现分开写2.private和publicprivate权限说明私有变量在类外是无法访问的,只有在类内或者使用类内函数访问类内函数访问3.private真的不能访问吗反汇编看看t对象在初始化public和private成员时都是一视同仁的,在底层还是没区别,都是编......