第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件

上传人:我*** 文档编号:140647391 上传时间:2020-07-31 格式:PPT 页数:67 大小:302KB
返回 下载 相关 举报
第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件_第1页
第1页 / 共67页
第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件_第2页
第2页 / 共67页
第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件_第3页
第3页 / 共67页
第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件_第4页
第4页 / 共67页
第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件》由会员分享,可在线阅读,更多相关《第1章4--4.5—4.8内置函数、函数的重载、函数模板、有默认参数的函数课件(67页珍藏版)》请在金锄头文库上搜索。

1、C+的初步知识(教材第1章) VC+的简单使用方法(补充) 3.4 C+的输入与输出 4.54.8内置函数、函数的重载、函数模板、有默认参数的函数 5.6C+处理字符串的方法 6.9引用 7.1.7动态分配和撤销内存的运算符new和delete,第一章,4.5内置函数 4.6 函数的重载 4.7 函数模板 4.8 有默认参数的函数,为什么要使用函数?,1、避免重复的编程。 2、使程序更加模块化,便于阅读、修改。,所编写的函数应尽量少与主调函数发生联系,这样便于移植。,说明:,1、一个源程序文件由一个或多个函数组成,编译程序以文件而不是以函数为单位进行编译的。,2、一个程序可以由多个源文件组成,

2、可以分别编译,统一执行。,3、一个程序必须有且只有一个main( )函数,C+从main( )函数开始执行。,4、C+语言中,所有函数都是平行独立的,无主次、相互包含之分。函数可以嵌套调用,不可嵌套定义。,5、从使用角度来说,分标准函数和用户自定义函数;从形式来说,分无参函数和有参函数。,库函数是C+编译系统已预定义的函数,用户根据需要可以直接使用这类函数。库函数也称为标准函数。用户可以直接使用系统提供的库函数。 库函数有很多个,当用户使用任一库函数时,在程序中必须包含相应的头文件。 如 #include等。,用户在设计程序时,可以将完成某一相对独立功能的程序定义为一个函数。 用户在程序中,根

3、据应用的需要,由用户自己定义函数,这类函数称为用户自定义的函数。,定义函数,类型标识符 函数名(void) 声明部分 语句 void printstar() int max(int x, int y),函数参数和函数值,形参和实参 调用语句和被调用函数之间有数据传递关系 在未出现函数调用时,形参并不占内存中的存储单元 调用结束后,形参所占的内存单元也被释放 实参对形参的数据传递是单向传递,函数的返回值,通过对函数的调用能使主调语句能得到一个确定的函数值 通过return语句获得 返回值类型:如果函数值的类型和return语句中表达式的值不一致,以函数类型为准。,函数的调用,调用形式: 函数名(

4、实参列表) 调用条件: 函数必须存在 如果使用库函数,要“#include” 使用自己定义的函数,而该函数与调用它的函数在同一程序文件中,但在主调函数后,则必须在调用前声明。,函数的定义和声明,定义: 对函数功能的确立,包括指定函数名、函数类型、形参及其类型、函数体等,它是完整独立的函数单位。 声明: 则是把函数的名字、函数类型以及形参的个数、类型和顺序通知编译系统,以便在对包含函数调用的语句进行编译时,据此进行对照检查。,函数声明的作用域,声明在某函数内,作用域就在该函数内 声明在函数外,可以被所有函数调用使用,主调函数,调用处,被调函数,将被调函数体的代码直接插到调用处,内置函数,*4.5

5、 内置函数,调用函数时需要一定的时间和空间的开销。,C+提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。有些书中把它译成内置函数。 内置函数的定义:定义函数时,在函数的类型前增加修饰词inline。 内置函数的实质是用存储空间(使用更多的存储空间)来换取时间(减少执行时间).,例4.4 函数指定为内置函数。 #include using namespace std; inline int max(int,int, int); /声明函数,注意左端有inline

6、int main( ) int i=10,j=20,k=30,m; m=max(i,j,k); couta) a=b; if(ca) a=c; return a; ,编译系统在遇到函数调用“max(i,j,k)”时,用max函数体的代码代替“max(i,j,k)”,同时将实参代替形参。 “m=max(i,j,k);”被置换成 if (ji) i=j; if(ki) i=k; m=i;,使用内置函数时应注意: 1、C+中,除在函数体内含有循环、switch分支和复杂嵌套的if语句外,所有的函数均可定义为内置函数。 2、内置函数也要定义在前,调用在后。形参与实参之间的关系与一般的函数相同。 3、对

7、于用户指定的内置函数,编译器是否作为内置函数来处理由编译器自行决定。说明内置函数时,只是请求编译器当出现这种函数调用时,作为内置函数的扩展来实现,而不是命令编译器要这样去做。也就是说它是建议性的,而不是指令性的。,4、内置函数的实质是采用空间换取时间,即可加速程序的执行,当出现多次调用同一内置函数时,程序本身占用的空间将有所增加。内置函数仅调用一次时,并不增加程序占用的存储空间。 5、可以在声明函数和定义函数时同时写inline,也可以只在其中一处声明inline,效果相同。 6、使用内置函数可以节省运行时间,但却增加了目标程序的长度。因此一般只将规模很小(一般为5个语句以下)而使用频繁的函数

8、(如定时采集数据的函数)声明为内置函数。,例: 希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。 程序设计者往往会分别设计出3个不同名的函数,原型为: int max1(int a,int b, int c); /求3个整数中的最大者 double max2(double a,double b,double c); /求3个双精度数中最大者 long max3(long a,long b,long c); /求3个长整数中的最大者 C+允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(function o

9、verloading)。 C+的编译器是根据函数的实参来确定应该调用哪一个函数的。,*4.6 函数的重载,例4.5 求3个数中最大数(分别考虑整数、双精度数、长整数情况)。 #include using namespace std; int main( ) int max(int a,int b,int c); /函数声明 double max(double a,double b,double c); /函数声明 long max(long a,long b,long c); /函数声明 int i1,i2,i3,i; cini1i2i3; /输入3个整数 i=max(i1,i2,i3); /

10、求3个整数中的最大者 coutd1d2d3; /输入3个双精度数 d=max(d1,d2,d3); /求3个双精度数中的最大者 coutg1g2g3; /输入3个长整数 g=max(g1,g2,g3); /求3个长整数中的最大者 coutg_max=gendl; ,int max(int a,int b,int c) /定义求3个整数中的最大者的函数 if(ba) a=b; if(ca) a=c; return a; double max(double a,double b,double c) /定义求3个双精度数中的最大者的函数 if(ba) a=b; if(ca) a=c; return

11、a; long max(long a,long b,long c) /定义求3个长整数中的最大者的函数 if(ba) a=b; if(ca) a=c; return a; ,运行情况如下: -76 567 (输入3个整数) i_max=567 (输出3个整数的最大值) 56.87 90.23 -3214.78 (输入3个实数) d_max=90.23 (输出3个双精度数的最大值) 67854 -912456 673456 (输入3个长整数) g_max=673456 (输出3个长整数的最大值) 上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。 重载函数除了允许参数类型不同以

12、外,还允许参数的个数不同。,例4.6 编写一个程序,用来求两个整数或3个整数中的最大数。如果输入两个整数,程序就输出这两个整数中的最大数,如果输入3个整数,程序就输出这3个整数中的最大数。 #include using namespace std; int main( ) int max(int a,int b,int c); /函数声明 int max(int a,int b); /函数声明 int a=8,b=-12,c=27; coutmax(a,b,c)=max(a,b,c)endl; /输出3个整数中的最大者 coutmax(a,b)=max(a,b)endl; /输出两个整数中的最

13、大者 ,int max(int a,int b,int c) /此max函数的作用是求3个整数中的最大者 if(ba) a=b; if(ca) a=c; return a; int max(int a,int b) /此max函数的作用是求两个整数中的最大者 if(ab) return a; else return b; 运行情况如下: max(a,b,c)=27 max(a,b)=8,两次调用max函数的参数个数不同,系统就根据参数的个数找到与之匹配的函数并调用它。 参数的个数和类型可以都不同。但不能只有函数的类型不同而参数的个数和类型相同。例如: int f(int); /函数返回值为整型

14、 long f(int); /函数返回值为长整型 void f(int); /函数无返回值 在函数调用时都是同一形式,如“f(10)”。编译系统无法判别应该调用哪一个函数。 在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。,int fun(int a, int b) return a+b; ,int fun (int a) return a*a; ,void main(void) coutfun(3,5)endl; coutfun(5)endl; ,8,25,不同的参数个数,重载函数的参数个数、参数类型或参数

15、顺序3者中必须至少有一种不同,函数返回值类型可以相同也可以不同,仅返回值不同时,不能定义为重载函数。,double sin(double x1,double x2) return x1*x2; double sin(double x,int a) return a+x; void main(void) double x; cinx;coutsin(x,x)endl; coutsin(x,10)endl; ,sin(x,x),sin(x,10),不同的参数类型,#include using namespace std; int add(int a,float b) return a+b; int

16、 add(float a,int b) return a+b; int main(void) cout3.34+5=add(3.34,5)endl; cout3+1.08=add(3,1.08)endl; return 0; ,不同的参数顺序,C+提供了函数模板(function template)。 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号