您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > C++程序设计--第5章-函数
主讲:刘艳菊第五讲函数2008-2009-2C++程序设计2本章内容提要:函数概述内联函数带默认参数值的函数函数重载作用域与存储类型系统函数C++语言程序设计2008-2009-2C++程序设计函数函数#includeiostream.hintsquare(intx)//函数定义{returnx*x;}voidmain(){intx,y;cout\nPleaseinputaninteger:x=;cinx;y=square(x);//函数调用coutsquare=yendl;}注:C++源程序都是由若干个函数组成的,每个函数完成一定的功能。运行时,程序总是从主函数main()开始执行,其他函数由main()函数或别的函数调用后执行,最后到main()函数终止运行。2008-2009-2C++程序设计45.1函数的定义与声明函数是C++程序的基本单元,是组成模块。一个C++程序是由若干个源程序文件构成的,而一个源程序文件是由若干个函数构成。函数类型从用户的角度看,有两种不同的函数:库函数用户自定义函数库函数也称标准函数,由C++系统提供。用户自定义函数则需要用户先定义,后使用。函数2008-2009-2C++程序设计55.1.1函数的定义函数的定义格式定义函数的一般形式:函数返回值的数据类型标识符函数名(形式参数表及其类型){函数体}函数voiddisplay_larger(intx,inty){if(xy)coutThelargeris:y\n;elseif(xy)coutThelargeris:x\n;elsecoutTwovaluesareequal.\n;}2008-2009-2C++程序设计65.1.1函数的定义在C++中定义函数时注意:函数的形参及类型说明要采用新的ANSI标准,即必须放在函数名后面的括号内。当形参有多个时,必须用逗号隔开。如果函数是无参函数,括号也不能省略。所有的函数都要先定义,后使用(调用)。不能省略函数值的类型,必须表明该函数的函数值的类型,即使该函数没有返回值,也要注明函数值的类型为void。函数2008-2009-2C++程序设计5.1.2函数的声明函数声明也称函数模型或函数原型。函数声明的一般格式为:函数类型名函数名(形式参数表);例如:设有一函数定义为floatfun(chara,intb,floatc){函数体}函数则对fun函数的声明为:floatfun(charm,intn,floati);//末尾要加上分号2008-2009-2C++程序设计5.1.2函数的声明关于函数声明的几点说明:函数必须先声明(或定义)后使用。必须确保函数声明语句与函数调用表达式出现在同一个文件中。虽然函数声明与函数头相似,但是它们之间也有细微的差别。如,floatfun(char,int,float);函数声明中当函数返回值类型为int或char时函数类型可以省略,一般情况下不能省略函数类型。函数声明中形参的次序不能写错。函数定义在调用前,函数声明可以省略。函数可以把例5.1改写为如下形式:#includeiostream.hintsquare(intx);//声明语句voidmain(){intx,y;cout\nPleaseinputaninteger:x=;cinx;y=square(x);//调用语句coutsquare=yendl;}intsquare(intx)//函数定义{returnx*x;}2008-2009-2C++程序设计9函数的定义与声明的区别函数的定义与声明的区别函数的“定义”是一个函数功能的确立,包括指定函数名,函数返回值的类型,形参及其类型,函数体等,它是一个完整的、独立的函数单位。函数的“声明”则只是对已经定义好的函数的接口进行的说明,它包括函数名,函数类型,形参的类型。不包括形参名和函数体。对函数进行声明的作用是告诉编译系统,在本程序中将要用到的函数是什么类型,参数的个数和类型,以便在主调函数中正确使用函数。函数2008-2009-2C++程序设计105.2函数的调用调用函数所谓调用函数是指在程序中使用了该函数。函数调用时,中断现行函数(主调用函数),程序的执行流程转向被调用函数的入口。开始执行被调函数。遇到return或}返回主调函数。相关的概念主调函数、被调函数、调用点函数调用的格式函数名(实参表)说明如果调用的是无参函数,则实参表可略去,但函数的括号不能省。如果实参表中有多个参数,参数之间用逗号隔开,实参的类型、个数应与形参一一对应。函数{语句1,…f1();…fn();…结尾语句}main()程序开始点程序结束点{…f1_1();…return}f1(){…fn_1();…return}fn(){…}f1_1(){…}fn_1()2008-2009-2C++程序设计111.形参和实参形式参数和实际参数(形参和实参)在调用函数时,大多数情况下,主调函数和被调函数之间有数据传递关系。而函数之间的数据传递途径之一就是靠函数的参数进行的。在定义函数时,函数名后面括号内的变量名为“形式参数”(形参)。在调用函数时,函数名后面括号内的表达式为“实际参数”(实参)。实参与形参个数相等,类型一致,按顺序一一对应。用实际参数向形式参数传递数据。函数2008-2009-2C++程序设计121.形参和实参举例函数#includeiostream.hintmax(int,int);voidmain(){inta,b,c;cinab;c=max(a,b);coutmaxiscendl;}intmax(intx,inty){intz;z=xy?x:y;returnz;}实参形参2008-2009-2C++程序设计131.形参和实参关于形参和实参的几点说明实参可以是变量、常量、或表达式,但必须有确定的值。而形参必须是变量。形参变量,只有存在发生函数调用时,形参才被分配存储单元,在调用结束时,形参所占的内存单元被释放。实参与形参的类型必须一致,否则会发生“类型不匹配”的错误。实参对形参的数据传递是“值传递”,即单向传递。由实参把数据传给形参,并且存储单元与形参是不同的单元。调用结束后,形参单元被释放,而实参单元保留并维持原值。函数2008-2009-2C++程序设计142.函数的返回值函数的返回值是通过函数中的return语句“返回”的。return语句的格式为:return(表达式);或return表达式;return语句的功能有两个:强制程序执行的流程从被调函数返回到主调函数。给主调函数带回一个确定的函数值。举例函数intmax(inta,intb){return(ab?a:b);}2008-2009-2C++程序设计152.函数的返回值函数返回值的类型函数返回值的类型就是在定义函数时的函数的类型。在定义函数时,函数的类型和return语句中的表达式类型不一致时,则以函数类型为准。如果被调用函数中没有return语句,为了明确表示函数“不返回值”,要用void定义无类型。举例这样系统就保证不使函数带回任何值。函数voidprint(){printf(clanguage);}2008-2009-2C++程序设计163.函数调用的形式函数通过下列三种方式完成函数调用:函数调用语句在一个函数调用的后面加上“;”作为一条语句。如:printf();函数表达式即函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。如:c=2*max(a,b);函数参数以函数的调用作为一个函数的实参。如:m=max(a,max(b,c));函数2008-2009-2C++程序设计4.函数的调用方式一个函数被定义后就是为了将来对其调用。调用函数是实现函数功能的手段。正确的数据传递是正确使用函数的前提,C++语言采用函数的形式参数(形参)和实际参数(实参)实现函数间的数据传递。C++中函数的调用方式:赋值调用传递变量值的传值调用传递变量地址值的传址调用引用调用2008-2009-2C++程序设计main(){inta,b,c;cinab;;c=max(a,b);coutMaxis:c);}max(intx,inty){intz;z=xy?x:y;return(z);}4.函数的调用方式例比较两个数并输出大者c=max(a,b);max(intx,inty){intz;z=xy?x:y;return(z);}2008-2009-2C++程序设计(1)函数的传值调用也称为值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递实参可以是常量、变量或表达式,但必须有确定的值。2008-2009-2C++程序设计例5.2问题使用传值调用方式完成两整数交换。#includeiostream.hvoidchange(inta,intb){inttemp;temp=a;a=b;b=temp;couta=a,”b=bendl;}voidmain(){intx=0;inty=1;change(x,y);coutx=x,y=yendl;}a=1,b=0x=0,y=12008-2009-2C++程序设计值传递调用演示711x:y:调用前:调用结束:711实参x:实参y:调用:711形参a:形参b:711实参x:实参y:change:711实参x:实参y:117形参a:形参b:temp2008-2009-2C++程序设计(2)函数的传址调用调用函数的实参地址值,被调用函数的形参用指针。调用时系统将实参的地址值赋给对应的形参指针,使形参指针指向实参变量。传址调用的特点是可以通过改变形参所指向的变量值来影响实参。2008-2009-2C++程序设计例5.3问题使用传址调用方式完成两整数交换。#includeiostream.hvoidchange1(int*a,int*b){inttemp;temp=*a;*a=*b;*b=temp;couta=*a,b=*bendl;}voidmain(){intx=0;inty=1;change1(&x,&y);coutx=x,y=yendl;}a=1,b=0x=1,y=02008-2009-2C++程序设计址传递调用演示59a:b:调用前:调用结束:95实参x:实参y:调用:ab形参a:形参b:59实参x:实参y:change:59实参x:实参y:59形参*a(a):形参*b(b):temp2008-2009-2C++程序设计(3)函数的引用调用在函数定义时,函数的参数(形参)可以说明为引用类型,这样在函数的调用过程中,实参与形参的结合就属于引用调用。引用主要用于函数的形参和返回值。对形参引用的改变,实质就是直接地通过引用(实参的别名)来改变实参的变量值。这种调用也起到了传址调用的作用,但更直接、方便。注意:引用调用方式中,实参用变量名,形参用引用,调用时将实参的变量名赋给对应的形参引用。在被调用函数中,改变引用的值就直接改变了对应的实参值。尽量避免使用传址方式来传递参数。2008-2009-2C++程序设计例5.4问题使用引用调用方式完成两整数交换。#includeiostream.hvoidchange2(int&a,int&b){inttemp;temp=a;a=b;b=temp;couta=a,b=bendl;}voidmain(){intx=0;inty=1;change2(x,y);coutx=x,y=yendl;}a=1,b=0x=1,y=02008-2009-2C++程序设计5.函数的参数(1)设置函数参数的默认值C++中,允许在函数的说明或定
本文标题:C++程序设计--第5章-函数
链接地址:https://www.777doc.com/doc-5204661 .html