本篇文章主要介绍C++语言中5中特殊形式的函数,分别是带默认形参值的函数、重载函数、内联函数、带形参和返回值的主函数以及递归函数。

一、带默认形参值的函数

  如果函数的形参在多数情况下都可以取某个固定的值,程序员可以在定义函数或声明函数原型时将该值指定为形式参数的默认值,这就是带默认形参值的函数。调用带默认形参值的函数时,如果给出实参,则将实参值赋值给形参变量,否则将默认值赋值给形参变量。

  示例:double Exchange(double amount,double rate = 6.8993)

     {

        return amount / rate;//实现人名币汇率换算,默认兑换成美元汇率6.8993

     }

  带默认形参值函数的语法细则:

    1)带默认值的形参,调用带默认形参值的函数时,如果给出实参,则将实参值赋值给形参变量,否则将默认值赋值给形参变量。

    2)在函数原型声明中指定默认值。如果函数定义调用语句之后,可以在调用语句之前对函数原型进行声明。声明时可以指定形式参数的默认值,此时函数定义中不在指定默认值。函数具有文件作用域,同一函数在相同作用域中只能指定一次默认值。

    3)同一函数在不同作用域可以指定不同默认值。如果多个默认值同时有效,调用函数时根据局部优先原则选择默认值。

    4)带默认值的形参必须定义在形参列表的后面。必须把带默认值的形参放在不带默认值的形参后面。

二、重载函数

  通常,同一文件中的函数不能重名,不同文件中的外部函数(非静态函数)之间也不能重名。C++语言规定:如果两个函数形参的个数不同或数据类型不同,那么这两个函数就可以重名。这样的重名函数被称为重载函数。注意:返回值类型或形参名字不同不能重载。

  示例:int Max(int x,int y); double Max(double x,double y); int Max(int x,int y,int z);这三个函数可以称重载。

     int Maz(int x,int y);和 double Max(int x,inty);不可以重载

三、内联函数

  内联函数是一种特殊函数,它在保证程序开发效率的同时,不见底程序的执行效率,其原理是:编译源程序时将函数代码直接嵌入到每一个调用语句处,而执行时不在进行函数跳转和数据传递。

  示例:inline double Exchange(double amount,double rate = 6.8993)

     {

        return amount / rate;//实现人名币汇率换算,默认兑换成美元汇率6.8993

     }

  内联函数的语法细则:

    1)关键字inline。在函数定义的函数头前面加关键字inline。如果函数定义在调用语句之后,或者在其他文件中,则在调用前声明该函数原型时加关键字inline。

    2)内联函数需是简单的函数。如果该函数的函数体比较复杂(例如包含循环语句),编译器将自动按照非内联的方式进行编译。

    3)内联函数的执行效率。内联函数只有被多次调用,其执行效率才能体现出来,因为一般只是将频繁调用的简单函数定义成内联函数。

四、带有形参和返回值的主函数

  C++语言标准对主函数main有如下规定:

    1) 一个C++程序有且仅有一个名为mian的主函数,主函数不能被重载。

    2)主函数是程序的起点。

    3)主函数的函数类型为int型,需返回一个int型整数。

    4)主函数可以定义形参来接收实参数据,也可以忽略形参(此时操作系统传递过来的实参数据将被忽略)。

  示例:有参形式

     int main(int argc,char *argv[ ])  //int main() 格式为无参形式

     {

        //此处为主函数代码

        return 0;

     }

    argc表示main接收到的参数个数。argv[0]表示该程序的文件名,argv[1]表示第一个实参数据。采用无参形式时,操作系统所传递过来的实参数据被忽略。主函数通过返回值传递自己的状态0为正常,-1为异常退出。

五、递归函数

  C++语言使用递归函数描述递归算法。递归函数的定义和调用域普通函数没什么两样,所不同的是递归函数的函数体应包含描述递归过程的三要素,即递归总结条件、已知结果和递归公式。

  一个典型递归函数定义形式如下:

    函数类型 函数名(形参列表)

    {

      . . .

      if(递归终结条件)

        取地已知结果;

      else

        按照递归公式调用自身;

    }

  示例:通过递归法求解阶乘N!

    int Factorial(int N)

    {

      int result;

      if (N == 0 )

        result = 1;

      else

        result = N * Factorial(N-1);

      return reslt;

    }

C++几种特殊形式的函数的更多相关文章

  1. JavaScript高级之函数的四种调用形式

    主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...

  2. 《从零开始学Swift》学习笔记(Day 7)——Swift 2.0中的print函数几种重载形式

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: l   print(_:).输出变量或常量到控制台,并且换行. l   print(_:_:).输出 ...

  3. javascript——四种函数调用形式

    此文的目的是分析函数的四种调用形式,弄清楚函数中this的意义,明确构造函对象的过程,学会使用上下文调用函数. 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而 ...

  4. Tensorflow 损失函数及学习率的四种改变形式

    Reference: https://blog.csdn.net/marsjhao/article/details/72630147 分类问题损失函数-交叉熵(crossentropy) 交叉熵描述的 ...

  5. binlog的几种复制形式

    binlog的几种复制形式 MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式 ...

  6. 应答流式RPC 请求流式RPC 向流式RPC 流式RPC的三种具体形式

    https://mp.weixin.qq.com/s/pWwSfXl71GQZ3KPmAHE_dA 用Python进行gRPC接口测试(二) 大帆船 搜狗测试 2020-02-07   上期回顾:用P ...

  7. #define宏定义形式的"函数"导致的bug

    定义了一个宏定义形式的"函数": #define  SUM8(YY)\ {\ int Y = YY>>2;\ ...\ } 然后使用的时候,传入了一个同名的变量Y: i ...

  8. JavaScript两种方法来定义一个函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)

    极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知. 笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 Android 篇,iOS 篇入口 ...

随机推荐

  1. 3.yum学习笔记

    一.yum介绍 将所有的rpm软件包放到指定服务器上,当进行yum在线安装时,可以自动解决依赖性问题. yum配置文件常位于/etc/yum.repo.d 目录下 [root@aaa251 ~]# c ...

  2. 图解 Git 工作原理

    此页图解 git 中的最常用命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. git add fil ...

  3. SpringBoot从0到0.7——第二天

    SpringBoot从0到0.7--第二天 今天来搭建一个登陆界面进行跳转,不带有数据库,看似就很简单的一个界面,却让我学习了好长时间去了解学习他的原理,能看懂的话还是尽量去看源码. 首先创建一个项目 ...

  4. NLP教程(6) - 神经机器翻译、seq2seq与注意力机制

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  5. UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞

    UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...

  6. Volatile的学习

    首先先介绍三个性质 可见性 可见性代表主内存中变量更新,线程中可以及时获得最新的值. 下面例子证明了线程中可见性的问题 由于发现多次执行都要到主内存中取变量,所以会将变量缓存到线程的工作内存,这样当其 ...

  7. 【万字长文】使用 LSM Tree 思想实现一个 KV 数据库

    目录 设计思路 何为 LSM-Treee 参考资料 整体结构 内存表 WAL SSTable 的结构 SSTable 元素和索引的结构 SSTable Tree 内存中的 SSTable 数据查找过程 ...

  8. python初识数据类型(字典、集合、元组、布尔)与运算符

    目录 python数据类型(dict.tuple.set.bool) 字典 集合 元组 布尔值 用户交互与输出 获取用户输入 输出信息 格式化输出 基本运算符 算术运算符 比较运算符 逻辑运算符 赋值 ...

  9. BERT的优化演进方法汇总(持续更新)

    模型结构演进 本文以演进方向和目的为线索梳理了一些我常见到但不是很熟悉的预训练语言模型,首先来看看"完全版的BERT":RoBERTa: A Robustly Optimized ...

  10. MySQL、SqlServer、Oracle,这三种数据库的优缺点,你知道吗?

    盘点MySQL.SqlServer.Oracle 三种数据库优缺点 MySQL SqlServer Oracle 一.MySQL 优 点 体积小.速度快.总体拥有成本低,开源:支持多种操作系统:是开源 ...