函数、函数与运算符重载.ppt
《函数、函数与运算符重载.ppt》由会员分享,可在线阅读,更多相关《函数、函数与运算符重载.ppt(257页珍藏版)》请在三一办公上搜索。
1、高级语言程序设计C+,张海威南开大学信息技术科学学院,第5章 函数与重载,函数的说明与使用,1,函数的嵌套与递归,2,函数与运算符重载,3,函数与C+程序结构,4,2,Database&Information System Lab,函数的使用与说明,【例5.1】求三次方程的根。计算三次方程x3+px+q=0的一个实根的公式为,Database&Information System Lab,3,xr=,将计算公式分解为如下步骤令实数xrA+B令实数A,B 分别为实数R,S的立方根令R=-q/2+a,S=-q/2a令a=sqrt(q/2)*(q/2)+(q/3)*(q/3)*(q/3),函数的使用
2、与说明,程序设计步骤输入方程的参数p和q,输出方程计算变量a的值计算变量R和变量S的值计算变量A和变量B的值分别对R和S求三次方根求y的三次方根的迭代公式计算Xr的值,Database&Information System Lab,4,函数的使用与说明,程序代码,Database&Information System Lab,5,#include/program5-1#include/use function sqrtusing namespace std;void main(void)float p,q,xr;coutP;coutq;coutThe Equation is:;coutx3+p
3、x+q=0endl;float a=sqrt(q/2)*(q/2)+(q/3)*(q/3)*(q/3);float R,S,A,B;const float eps=1e-6;/设置精确度R=-q/2+a;S=-q/2-a;,函数的使用和说明,Database&Information System Lab,6,float root,croot=R;doroot=croot;croot=(2*root+R/(root*root)/3;while(fabs(croot-root)eps);A=croot;croot=S;doroot=croot;croot=(2*root+S/(root*root)
4、/3;while(fabs(croot-root)eps);B=croot;xr=A+B;coutendlThe real root of the equation isxr;,函数的使用和说明,程序分析程序中包含两段类似的代码,完成相同的功能:,Database&Information System Lab,7,float root,croot=R;doroot=croot;croot=(2*root+R/(root*root)/3;while(fabs(croot-root)eps);A=croot;,croot=S;doroot=croot;croot=(2*root+S/(root*r
5、oot)/3;while(fabs(croot-root)eps);B=croot;,函数的使用和说明,函数的引入程序中功能相同,结构相似的代码段可以用函数进行描述程序的功能相对独立,用来解决某个问题具有明显的入口和出口入口:参数出口:返回值,Database&Information System Lab,8,函数的使用和说明,Database&Information System Lab,9,函数的使用和说明,声明函数cuberoot参数为待求根的变量函数cuberoot的定义如下:,Database&Information System Lab,10,float cuberoot(floa
6、t x)/精确到小数点后6位float root,croot;const float eps=1e-6;croot=x;do root=croot;croot=(2*root+x/(root*root)/3;while(fabs(crootroot)eps);return croot;,函数的使用和说明,函数的作用实现程序功能的模块化实现程序结构的简化实现程序代码的重用函数的应用场景包含多处功能相同的代码处理数据的类型、处理过程相同或相似代码段具有代表性或特殊含义,Database&Information System Lab,11,函数的使用和说明,用函数的思想实现最简单的C+程序,Data
7、base&Information System Lab,12,#inlcudeusing namespace std;void printString();/函数原型int main()printString();/调用函数printString return 0;void pirntString()/函数定义 cout“Hello!”endl;return;/函数返回,函数的说明与使用,函数的使用步骤先说明,后调用程序中必须包含函数的说明及定义函数的说明方式函数原型函数定义可以出现在程序的任何合适的地方函数定义函数定义必须出现在调用函数之前,Database&Information Syst
8、em Lab,13,函数的说明与使用,主调函数函数体中调用其它函数被调函数被其它函数调用的函数上述概念是相对的概念,一个函数既可以调用其它函数(包括该函数自身),亦可以被其它函数调用(包括该函数自身),Database&Information System Lab,14,从函数形式划分,可分为无参函数与有参函数两类,从使用角度划分,可将函数分为:系统预定义的标准库函数(如,sin,abs等),以及由用户自定义的函数,函数分类方法,15,Database&Information System Lab,函数的说明与使用,函数的说明与使用,标准库函数程序中可直接使用(调用)系统预定义的标准库函数,但
9、要求在调用前使用编译预处理指令include将对应的头文件包含进来用户自定义函数由用户自定义的函数与系统预定义的标准库函数的不同点在于,自定义函数的函数名、参数个数、函数返回值类型以及函数所实现的功能等都完全由用户程序来规定(指定),Database&Information System Lab,16,函数的说明与使用,标准库函数标准输入输出流()setw()、setwidth()等标准文件流()open()、close()等标准字符串处理函数()strcpy()、strcmp()等标准数学函数()sqrt()、pow()等,Database&Information System Lab,17
10、,函数的说明与使用,用户自定义函数普通函数内联函数类的成员函数类的友元函数虚函数,Database&Information System Lab,18,函数的说明与使用,无参函数调用它们时不需要提供实际参数函数原型的一般形式();函数定义的一般形式()通常用来实现某种特定的功能不需要进行数据的传递处理的数据通常与主调函数无关,Database&Information System Lab,19,函数的说明与使用,无参函数【例5.2】定义一个函数,实现打印10个“*”的功能,Database&Information System Lab,20,void printStar()for(int i=
11、0;i10;i+)cout“*”;coutendl;,函数的说明与使用,有参函数(带有参数的用户自定义函数)进行调用时,必须提供所需个数的且具有相匹配数据类型的实际参数函数原型的一般形式();定义的一般形式()通过调用处提供的不同实参值来计算出其对应的函数值、或实现某种与传递过来的那些不同值有关的某种功能。,Database&Information System Lab,21,函数的说明与使用,有参函数【例5.3】定义一个函数,控制输出“*”的个数,Database&Information System Lab,22,void printStar(int k)for(int i=0;ik;i+
12、)cout“*”;coutendl;,函数的使用,调用,说明与定义,参数,重载,返回,内联函数,23,Database&Information System Lab,函数的说明与使用,函数的说明与使用,Database&Information System Lab,24,函数的说明与使用,函数的说明和定义在C+程序中,函数有两种说明方式函数原型在调用函数之前说明函数原型函数定义在调用函数之前对函数进行定义,Database&Information System Lab,25,函数的说明与使用,函数原型也称为函数声明用来指明函数的名称、参数以及返回值类型函数原型格式为:();例如int add(
13、int a,int b);inline void swap(float,Database&Information System Lab,26,函数的说明与使用,函数原型属性说明:可缺省,一般可以是下面的关键字之一inline:表示该函数为内联函数static:表示该函数为静态函数virtual:表示该函数为虚函数friend:表示该函数为某类(class)的友元函数返回值类型函数处理得到的结果的数据类型函数名标识符,Database&Information System Lab,27,函数的说明与使用,函数原型参数表空参数表void printroot();void型参数void printr
14、oot(void);,*float cuberoot(float);float cuberoot(float x);,Database&Information System Lab,28,函数的说明与使用,函数定义函数定义与函数原型的主要区别是它还包括函数体,其格式为()函数体复合语句即程序块,由完成函数功能所需的全部语句构成,Database&Information System Lab,29,函数的说明与使用,函数的说明和定义“函数原型”的说明方式“函数定义”的说明方式,Database&Information System Lab,30,#includeusing namespace s
15、td;void printStar(int);/函数原型int main()printStar(10);/调用函数void printStar(int k)/函数体,#includeusing namespace std;void printStar(int k)/函数定义int main()printStar(10);/调用函数,函数的说明与使用,函数的说明和定义两种说明方式的区别函数原型的参数表中,参数名可以省略;函数定义的参数表中,必须给出参数名(省略参数名为无名参数)函数原型的函数体,可以出现在函数调用之后;函数定义的函数体,必须出现在调用之前函数原型的参数表后面加分号“;”,函数定义
16、的参数表后面是函数体,即花括号“”函数定义不能出现在任何函数体中,函数原型可以出现在其它函数体中,Database&Information System Lab,31,函数的说明与使用,函数的调用函数调用是已定义函数的一次实际运行,与某类型的一个变量和后文中某类的一个对象类似,函数调用是函数定义的一个“实例”在C+程序中,除main函数外,其它任一函数的执行都是通过在main函数中直接或间接地调用该函数而引发的。调用一个函数就是去执行该函数之函数体的过程,Database&Information System Lab,32,函数的说明与使用,函数的调用函数调用过程,Database&Infor
17、mation System Lab,33,函数的说明与使用,函数的调用函数调用的执行顺序根据调用语句中的函数名在整个程序中搜索同名函数定义;对实参数的参数个数,类型,顺序进行核对,判定是否与函数定义中的形参表对应一致根据参数的类型(值参数或引用参数)进行值参数的值传递或引用参数的换名运行函数体代码返回调用点,并返回所要求的函数值,Database&Information System Lab,34,函数的说明与使用,函数的调用无参函数调用格式()例如:printStar();有参函数调用格式()例如:printStar(26);,Database&Information System Lab,
18、35,函数的说明与使用,函数的返回函数的返回表示函数执行结束,将执行结果(无论是否有具体的数据)返回到调用函数的地方函数返回时完成的任务把运行控制从函数体返回到函数调用点根据返回值要求,返回所需要的数据值返回值类型void数值型引用类型,Database&Information System Lab,36,函数的说明与使用,函数的返回返回值类型空型(void)如果函数无值返回,应说明为void 类型。未作类型说明的函数,系统认为是int 类型函数,应返回一整型值值型:返回一个具有类型的值,包括int、float、char、bool等当函数要返回的值不止一个时,情况比较复杂,一般它可以以结构或类
19、的形式,也可以以结构,数组或对象指针类型方式实现,这样的实例在后面的章节可以见到引用类型:详见第6章,Database&Information System Lab,37,函数的说明与使用,函数的返回函数返回用return语句表示return语句有如下几种写法return;/函数返回值类型为空(void)return;/与函数返回值的类型一致return();/与前一种写法等价,Database&Information System Lab,38,第一种格式的return用于立即从被调函数中返回,当函数类型为void时,应使用这种格式的返回语句。当函数类型为非void型时,应使用第二或第三种格
20、式的return语句,此两种格式的语句效果完全相同(可将第二种格式看成是第三种格式的省略形式),系统此时都将计算出表达式的值,并“携带”该值立即从被调函数中返回,函数的说明与使用,函数应用举例【例5.4】设 f(x)=(x*x+x+1)/2-5.5求z=(f(2.5)+2*f(6)/f(4.3),并显示结果z。对任意输入的一个实数a,求出f(a)并显示分析:输入(参数):x输出(返回):函数的运算结果函数原型:double f(double);,Database&Information System Lab,39,函数的说明与使用,函数应用举例【例5.4】函数定义double f(double
21、 x)double y;y=(x*x+x+1)/2-5.5;return y;/对非void类型的函数,必须有一个/return语句,由它返回函数值,Database&Information System Lab,40,函数的说明与使用,函数应用举例【例5.4】程序#includeusing namespace std;double f(double);int main()double z,a;z=(f(2.5)+2*f(6)/f(4.3);/调用自定义函数fcouta;coutf(a)=f(a)endl;/算出f(a)并输出return 0;double f(double x)/函数f的定义
22、,Database&Information System Lab,41,函数的说明与使用,函数应用举例【例5.4】程序(不带函数原型)#includeusing namespace std;double f(double x)/函数f的定义int main()double z,a;z=(f(2.5)+2*f(6)/f(4.3);/调用自定义函数fcouta;coutf(a)=f(a)endl;/算出f(a)并输出return 0;,Database&Information System Lab,42,函数的说明与使用,函数应用举例【例5.4】点评f()函数体内的3行也可用如下的一行来代替 re
23、turn(x*x+x+1)/2-5.5);return句括号内表达式的值,即为整个函数的返回值。return句也可使用另一格式,即可以不括起表达式:return(x*x+x+1)/2-5.5;/OK!,Database&Information System Lab,43,f=(x*x+x+1)/2-5.5;不可给函数名f赋值。return(f);返回值类型应该是double,而非指针类型(函数名相当于一个指针)。f(x)=(x*x+x+1)/2-5.5;赋值号左端非变量(也即f(x)非左值)。,函数的说明与使用,函数的参数C+语言的函数分为无参函数和有参函数函数的参数无参数一个参数多个参数函数
24、参数表的写法一般写法省略参数名(无名参数)参数赋初值,Database&Information System Lab,44,函数的说明与使用,函数的参数形参和实参函数说明中的参数称为形式参数(形参),函数调用中的参数称为实际参数(实参)实参表在参数个数、参数顺序、以及参数类型等方面要与被调函数的形参表之间有一个一一对应的相互匹配关系编译器将根据参数的顺序,来逐一实现实参与对应形参的“结合”,而后执行一遍函数体(而完成本次的函数调用),Database&Information System Lab,45,函数的说明与使用,函数的参数无名参数函数定义中,只有类型,没有名称的参数int f(int
25、a,int b)return a+b*b;int f(int a,int b,int)return a*a+b;两个不同的函数同名,但由于第二个函数包含一无名参数,使得在调用时能够被区分,f(x,y)是第一个函数的调用,f(x,y,0)是第二个函数的调用,Database&Information System Lab,46,函数的说明与使用,函数的参数可缺省参数(参数的默认值)允许在函数定义处为其中最后面的连续若干个参数设置默认值(也称缺省值)若调用处缺省了某个或某些实参的情况下,系统将自动使用那些在函数定义处给定的参数默认值例如,在定义函数func时为其三个参数设置默认值:,Database
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 运算 重载

链接地址:https://www.31ppt.com/p-6244195.html