第2章 函数与引用.ppt_第1页
第2章 函数与引用.ppt_第2页
第2章 函数与引用.ppt_第3页
第2章 函数与引用.ppt_第4页
第2章 函数与引用.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章函数与引用 2 1函数概述2 2函数重载2 3内联函数2 4具有默认参数值的函数2 5引用小结及练习题 第2章函数与引用 教学目的 了解简单的C 程序的特点 掌握函数重载 掌握内联函数与一般函数的区别了解参数特殊的函数掌握引用 区分引用调用与值调用的区别 教学重点与难点 本章重点 函数重载 内联函数 参数特殊的函数引用 本章难点 函数重载 内联函数与一般函数的区别 引用调用与值调用的区别 第2章函数与引用 2 1函数概述 C 语言程序的结构特点 程序整体由一个或多个称为函数的程序块组成每个函数都具有各自独立的功能和明显的界面 2 1函数概述 问题1 函数是什么 就是编写完成函数功能的程序块问题2 函数定义的一般格式 问题3 函数返回值类型 数值类型 指针类型 void类型 2 1函数概述 2 2函数重载 函数的重载又称函数名重载 是指同一个函数名可以有多个函数实现 或者说实现不同功能的函数可以具有相同的函数名 一组参数和返回值不同的函数共用一个函数名 2 2函数重载 当某个函数中调用到重载函数时 编译器会根据实参的类型去对应地调用相应的函数 匹配过程如下 1 如果有严格匹配的函数 就调用该函数 2 参数内部转换后如果匹配 调用该函数 3 通过用户定义的转换寻求匹配 2 2函数重载 例2 1 voidprint double voidprint int voidfunc print 1 print 1 0 print double print 3 1415f pirnt double 2 2函数重载 例2 2利用参数类型的不同实现重载函数 includeusingnamespacestd intAbs intx cout 0 x x doubleAbs doublex cout 0 x x voidmain cout 20的绝对值是 Abs 20 endl cout 111 11的绝对值是 Abs 111 11 endl 2 2函数重载 intmax inta intb intmax inta intb intc intmax inta intb intc intd voidmain cout max 3 5 endl cout max 7 9 0 endl cout max 23 15 3 6 endl intmax inta intb returna b a b intmax inta intb intc intt max a b returnmax t c intmax inta intb intc intd intt1 max a b intt2 max c d returnmax t1 t2 例2 3利用参数个数不相同实现重载函数 2 2函数重载 定义重载函数需要注意以下两点 1 定义的重载函数必须具有不同的参数个数或不同的参数类型 只有这样编译系统才能根据不同的参数决定调用哪一个函数版本 2 仅仅是函数返回值不同并不能区分两个函数 因此不能根据函数的返回值定义函数的重载 否则会发生二义性的错误 例如 intsum inta voidsum inta 2 2函数重载 2 3内联函数 将一个函数声明为内联函数时 只要在函数定义前加关键字inline即可 格式如下 inline 参数表 函数体 编译系统对内联函数的处理与一般函数的处理方式不同 在编译调用内联函数的语句时 编译器将内联函数的代码插入到函数调用 这样在运行过程中 将直接运行插入的代码 而不需要花费实参入栈等一系列的开销 从而可以提高程序运行的速度 2 3内联函数 例2 4用内联函数计算立方体的体积inlinefloatCube floata returna a a includeusingnamespacestd voidmain cout side cout 边长为 side 的立方体的体积为 Cube side n 问题 内联函数使用是否受限制 适用于简短函数 且在内联函数中不包含复杂的控制结构语句 2 3内联函数 2 4具有默认参数值的函数 定义 在函数定义和函数原型说明中 给函数的参数指定值 在定义具有默认参数值的函数时 要为参数指定一个值 比如 voidFun intx 1 inty 2 在进行函数调用时 如果给出了实参值 则将实参传递给对应的形参 如果没有给出实参值 则利用指定的参数默认值进行调用 例子如下 2 4具有默认参数值的函数 参数默认是通过不同参数来分辨一个函数调用中的行为差异 例2 5具有默认参数值的延时函数 includeusingnamespacestd voidDelay intn 1000 A for n 0 n voidmain void cout 延时500个单位时间 n Delay 500 Bcout 延时1000个单位时间 n Delay C 2 4具有默认参数值的函数 默认参数规则函数参数默认值只能从后往前设置 例 voidfunc inta 1 intb intc 3 intd 4 voidfunc inta intb 1 intc 3 intd 4 调用时的实参按位置解析 默认参数也只能从后往前逐个替换尾部的 缺漏 例 func 10 15 20 30 func 0 func 12 12 func 2 15 20 注 既有函数声明又有函数定义时 默认参数值只能置身于声明中 2 4具有默认参数值的函数 例2 6设计一程序 输入圆柱体的半径和高度 求出圆柱体的体积 definePI3 1415926floatV floatr floath 10 Avoidmain void floatr h cout r h cout r cout 第二个圆柱体的体积为 V r n floatV float 5 float 20 Bcout 第三个圆柱体的体积为 V n floatV floatr floath return PI r r h 2 4具有默认参数值的函数 2 5引用 2 5 1函数的原型说明 与变量一样 函数的定义和使用也必须遵循先定义后使用的原则 如果函数的调用在函数的定义之前 就会出现编译错误 intMax intx inty intMax intint voidmain t Max a b t Max c t Print t intMax intx inty return x y x y voidPrint intx cout 三个数中最大的数为 x endl 2 5引用 消除这种错误的方法的方法之一是在调用函数之前对该函数进行函数的原型说明 函数原型说明的一般格式为 类型 或 类型 函数原型说明的目的是告诉编译程序 该函数的参数个数 各参数的类型和返回值类型 以便其后调用该函数时 编译程序对函数的参数的类型 个数 顺序及函数的返回值做有效性检查 函数原型说明可以出现在程序中的任何位置 只要在调用前即可 且对函数原型说明的次数没有限制 注意 函数的原型说明只是引用性说明 它以分号结束 没有函数体部分 而函数的定义则必须有函数体 2 5引用 值传递 值调用 在调用时仅将实参的值赋给形参 在函数中对形参值的任何修改都不会影响到实参的值 好处 减少了调用函数与被调用函数之间的数据依赖 增强了函数自身的独立性 缺点 被调用函数向调用函数传递的数据仅有一个返回值 有时显得不够用 2 5 2函数的值调用 2 5引用 例2 7值传递应用 两数交换 includevoidswap inta intb voidswap int 2 5引用 2 5引用 引用是另一个变量别名 或另一个变量的同义词 引用变量依附于另一个变量而定义 定义引用类型变量的一般格式为 其中为引用类型的变量 而必须是已经定义过的且与引变量同类型的变量 2 5 3引用 在定义一个引用变量时 编译系统并不会为其单独分配存储空间 因此必须对它进行初始化 将它与某个已定义的同类型的变量相关联 inti int 2 5引用 例2 8引用类型变量的定义及使用voidfun inti 10 staticint 2 5引用 课堂练习 利用引用编写交换函数swap includeusingnamespacestd voidswap int 2 5引用 对于引用类型的变量时 要注意如下几个问题 1 在定义引用类型的变量时 不同类型的变量或常量是不能用来对它初始化 int 2 5引用 4 可以定义对引用类型变量的引用 但不能定义引用的引用 也不能定义引用指针和引用数组 inti 2 5引用 7 引用返回类型 函数的返回值也可以是引用类型 此时该函数的返回值一定是某个变量的引用 当函数的返回值为引用类型时 其函数体中的return语句的参数必须为全局变量 静态变量或形

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论