c语言第三章 函数_第1页
c语言第三章 函数_第2页
c语言第三章 函数_第3页
c语言第三章 函数_第4页
c语言第三章 函数_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

C++程序设计

宋存利第三章函数知识点:函数的定义与调用函数重载内联函数默认参数函数与static函数与const3.1函数的定义与调用函数是一段命名的代码段,代码段的名称即为函数名。C++函数定义的一般格式为:返回值类型

函数名(形式参数列表){

函数体}【例3-1】编写一个函数,求两个整型数据的最大值。Third_1.cpp返回值类型:用来说明一个函数调用结束后,反馈给它的上一级主调函数的返回结果的类型。此处的类型可以是系统提供的内置数据类型,也可以指针、数组或用户自定义类型,若无结果反馈,也可设置为void,说明此函数没有返回值。函数名:是对函数体的命名,通过引用该名称,可以对这段代码进行调用,否则如果不对函数体命名,则函数体就像一个无名的孩子一样,在日程生活中别人无法对它进行引用。函数名的命名规则要符合标识符的命名规则。形式参数列表:形式参数(简称形参)列表是一个函数与外界的接口,通过此接口,函数可以从上一级主调函数处获取其解决相关问题需要知道的已知信息。同时,通过此接口,函数也可以向上一级主调函数传送问题处理的结果,毕竟返回值能返回给上一级调用函数的信息有限,而通过形参列表,函数可以反馈给上一级主调函数更多信息。函数体:为实现函数相应功能而编写的一段程序代码,这段代码需要花括号“{}”括起来。说明:当一个函数有返回值类型时,函数体中必须至少有一个return语句来返回结果,对于返回值为void的函数,可以没有return语句,也可用语句“return;”返回。3.1.2函数调用1.函数的调用有两种形式:(1)语句调用(2)表达式调用2.函数原型声明:对于返回值结果为void的函数,调用格式只能采用语句调用,不能采用表达式调用,原因是它不返回任何的信息,因此不能出现在表达式中参与运算,语句调用格式为:

函数名(实际参数列表);

//实际参数简称实参案例:third_2对于有返回值的函数,一般采用表达式调用,采用语句调用也没有错,但由于没有一个有效机制去接收函数的返回值结果,所以若函数的返回值很重要,则这种形式的函数调用根本解决不了任何问题,使得CPU做了一段无用功。这就好比废了九牛二虎之力对10个数据找出了最大值,但此时却没人接收该结果。因此对有返回值的函数,一般采用表达式调用。

案例:third_3C++源程序中,若一个函数先调用后定义,则编译器在编译该程序时,会提示错误信息。为正确编译,需要进行函数原型声明。函数原型声明:应该包含函数的前三部分信息,即返回值类型、函数名以及函数的参数信息。其一般格式为:

返回值类型说明

函数名(函数参数信息);函数原型声明案例:third_4,多文件程序案例:

third_5

例3-5】多文件程序,该案例文件中。3.1.2函数调用3.实参与形参的结合方式:形参:实参:形参与实参的结合方式有三种,分别为:传值方式传引用方式传地址方式,形参:在定义一个函数时,出现在该函数参数列表中的变量,叫做形参,也叫形式参数。实参:在调用一个函数时,与函数形参对应的传入的变量、常量或表达式等称为实参。传值方式就是在函数调用时,利用实参创建形参只是将实参的值传递给形参,之后两者将没有关系。案例:third_6函数形参为引用时,实参与形参的结合就采用引用方式传递。案例:third_6_2结论:引用做函数的参数,则引用在函数中发生什么样的变化,其对应的实参则做相同的变化。提示:普通引用做函数参数,一般情况下与其对应的实参必须是变量,不能是常量或表达式。但用const声明的引用,实参可以是变量、常量和表达式。当指针做函数的形参时,则调用函数与其对应的实参就必须是相同类型的指针,这时实参与形参的结合就采用地址方式传递。案例:third_6_3结论:指针做函数的参数,若在函数体中,指针所指向的内存空间的值发生变化,则实参的值也做相同的改变。3.1.4函数应用案例【例3-7】编写排序函数,对n个整型数据进行排序。third_7.cpp3.2函数重载C++程序中,同一个作用域内出现的多个同名的函数形成函数重载。【例3-8】以两个变量值的交换为例,介绍函数重载,同时体会重载的优点。Third_8.cpp函数重载注意事项:1.同名函数要形成重载,必须满足要么参数个数不同、要么参数对应位置类型不同,仅仅通过函数的返回值类型不同是不能形成函数重载的。2.重载函数的函数体不要求相同,但一般功能相同,这也是函数重载的意义,否则若同名函数功能不同,则就容易引起困惑,降低程序的可读性,与函数重载的初衷不符。3.3内联函数1.内联函数(inlinefunction)的定义格式:inline返回值类型

函数名(参数列表){函数体}2.内联函数案例third-10.cpp3.结论:结论:内联函数是一种以空间换取时间的机制,提高了程序执行效率,但增加了源程序的代码量。因此当一个内联函数的函数体很大时,在源程序中又对其进行反复多次调用,那么源程序将会急剧增大,甚至会造成系统空间不足的问题。因此内联函数比较适合短小的函数。提示:(1)inline对编译器而言只是一个建议,如果定义的函数体内有递归、循环、switch等,编译器编译时会自动忽略掉内联,将这样的函数当做普通函数处理。(2)内联函数必须先定义,后调用,编译器才能将其处理成内联函数。否则若先调用,后定义则按照普通函数处理。(3)定义在类内部的成员函数默认定义为内联函数,不用声明inline,编译器也将其处理成内联函数。3.4默认参数1.在C++中,允许在定义一个或声明一个函数的同时对函数的参数赋默认值,在调用函数时,若没有传递相应的实参,则编译器将采用默认值作为实参来调用这个函数,这就是默认参数(defaultarguments)。2.【例3-11】以求圆的面积函数为例。Third_11.cpp,third_12.cpp3.提示:提示:(1)当一个函数中有多个参数时,可以对所有参数都设置默认值,也可以对部分参数设置默认值,但必须遵循由右向左对参数设置默认值的规则,也就是说,只有最后一个参数有默认值,倒数第二个参数才可以有默认值,同理只有倒数第二个参数有了默认值,倒数第三个参数才可以有默认值,依此类推。(2)在不同的作用域中,编程人员可以对函数进行多次声明,并可赋予参数不同的默认值,编译器对它的处理机制和普通变量作用域的处理机制一样,在那个作用域内,哪个作用域内该函数的声明有效,但在同一个作用域中,只能对同一个函数声明1次。3.5函数与static(1)在定义一个函数时,可以在函数返回值的前面加上关键字static,此时说明此函数为静态函数,一个静态函数只能在函数所在文件中被调用,出了该文件,则该函数将不能被调用。静态函数定义的一般格式为:static函数返回值类型

函数名(参数列表){函数体}(2)在定义函数时,可定义函数中的某个变量为静态变量。静态变量案例:third_13.cpp说明:结论:在函数中定义的静态变量属于局部变量,只能在该函数中引用,但它只在函数第一次调用时创建并初始化。在函数调用结束时,与该函数中的其他普通局部变量不同的是普通局部变量将销毁并释放内存,而静态局部变量不释放内存。下次调用函数时,将跳过静态变量的定义语

温馨提示

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

评论

0/150

提交评论