第2讲-C对C的函数的扩充及使用课件_第1页
第2讲-C对C的函数的扩充及使用课件_第2页
第2讲-C对C的函数的扩充及使用课件_第3页
第2讲-C对C的函数的扩充及使用课件_第4页
第2讲-C对C的函数的扩充及使用课件_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

第2讲

C++对C的函数的扩充及使用

2.1授课内容

C++对C的函数的扩充及使用,

包括以下几个主要部分:1.函数原型声明、函数定义及调用;2.函数的重载;3.有默认参数的函数;4.函数模板。

12/2/20221第2讲C++对C的函数的扩充及使用2.1授课内容12第2讲

C++对C的函数的扩充及使用

2.2授课要求1.掌握函数定义的格式,掌握函数原型声明及函数调用;2.掌握函数调用过程中参数传递的原理及有默认参数的函数调用;3.掌握全局变量和局部变量的使用;4.掌握函数重载的方法;5.掌握保留字inline的含义与使用;6.熟悉函数模板。12/2/20222第2讲C++对C的函数的扩充及使用2.2授课要求12第2讲

C++对C的函数的扩充及使用

2.3授课重点1.函数的声明、定义及调用;2.函数重载的方法。

2.4授课难点1.函数的嵌套和递归调用;2.函数模板。

12/2/20223第2讲C++对C的函数的扩充及使用2.3授课重点121.函数的声明一个C程序是由若干个函数组成的。C++面向过程的程序设计沿用了C语言使用函数的方法。在C++面向对象的程序设计中,主函数以外的函数大多是被封装在类中的。主函数或其他函数可以通过类对象调用类中的函数。

图1函数调用的示意图。

图112/2/202241.函数的声明一个C程序是由若干个函数组成的。图112/1/1.函数的声明函数声明的格式:函数类型函数名(参数表);比如:intmax(intx,inty);voidcount();无参数,返回值也为空。12/2/202251.函数的声明函数声明的格式:无参数,返回值也为空。12/1.函数的声明定义函数格式类型标识符函数名(形式参数表列){声明部分语句}

12/2/202261.函数的声明12/1/202261.函数的声明例如:intmax(intx,inty)//函数首部,函数值为整型,有两个整型形参{intz;//函数体中的声明部分z=x>y?x:y;//将x和y中的大者的值赋给整型变量zreturn(z);//将z的值作为函数值返回调用点}C++要求在定义函数时必须指定函数的类型(即函数返回值类型)。12/2/202271.函数的声明例如:12/1/202271.函数的声明注意:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明,这是强制性的(C语言是建议性的)。12/2/202281.函数的声明注意:12/1/202282.形式参数和实际参数在调用函数时,大多数情况下,函数是带参数的。(1)形式参数:在定义函数时函数名后面括号中的变量名称为形式参数(formalparameter,简称形参)。(2)实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为实际参数(actualparameter,简称实参)。12/2/202292.形式参数和实际参数在调用函数时,大多数情况下,函数是带参3.函数的调用(1)函数调用的一般形式函数名([实参表列])(2)函数调用的方式按函数在语句中的作用来分,可以有以下3种函数调用方式:A.函数语句把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。比如:printstar();12/2/2022103.函数的调用(1)函数调用的一般形式12/1/2022103.函数的调用B.函数表达式函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。比如:c=2*max(a,b);C.函数参数函数调用作为一个函数的实参。比如:m=max(a,max(b,c));//max(b,c)是函数调用,其值作为外层max函数调用的一个实参12/2/2022113.函数的调用B.函数表达式12/1/2022114.内置函数调用函数时需要一定的时间和空间的开销。图2表示函数调用的过程。

图2表示函数调用的过程12/2/2022124.内置函数调用函数时需要一定的时间和空间的开销。12/1/4.内置函数C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。(1)内置函数定义,这种嵌入到主调函数中的函数称为内置函数(inlinefunction),又称内嵌函数。(2)声明格式:只需在函数首行的左端加一个关键字inline即可。比如:inlineintmax(intx,inty);内置函数节省了时间开销,但需要更多的空间。12/2/2022134.内置函数C++提供一种提高效率的方法,即在编译时将所调用5.函数的重载(1)函数的重载的含义C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。在编程时,有时我们要实现的是同一类的功能,只是有些细节不同。12/2/2022145.函数的重载(1)函数的重载的含义12/1/2022145.函数的重载例如:希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者往往会分别设计出3个不同名的函数,其函数原型为:intmax1(inta,intb,intc);//求3个整数中的最大者doublemax2(doublea,doubleb,doublec);//求3个双精度数中最大者longmax3(longa,longb,longc);//求3个长整数中的最大者12/2/2022155.函数的重载例如:希望从3个数中找出其中的最大者,而每次求5.函数的重载例P12的1.6:求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)。intmax(inta,intb,intc);//函数声明doublemax(doublea,doubleb,doublec);//函数声明longmax(longa,longb,longc);//函数声明采用函数重载12/2/2022165.函数的重载例P12的1.6:求3个数中最大的数(分别考5.函数的重载#include<iostream>usingnamespacestd;intmain(){intmax(inta,intb,intc);//函数声明doublemax(doublea,doubleb,doublec);//函数声明longmax(longa,longb,longc);//函数声明inti1,i2,i3,i;cin>>i1>>i2>>i3;//输入3个整数i=max(i1,i2,i3);//求3个整数中的最大者cout<<″i_max=″<<i<<endl;doubled1,d2,d3,d;cin>>d1>>d2>>d3;//输入3个双精度数d=max(d1,d2,d3);//求3个双精度数中的最大者cout<<″d_max=″<<d<<endl;longg1,g2,g3,g;cin>>g1>>g2>>g3;//输入3个长整数g=max(g1,g2,g3);//求3个长整数中的最大者cout<<″g_max=″<<g<<endl;}P12例1.612/2/2022175.函数的重载#include<iostream>P1215.函数的重载intmax(inta,intb,intc)

//定义求3个整数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022185.函数的重载intmax(inta,intb,int5.函数的重载doublemax(doublea,doubleb,doublec)

//定义求3个双精度数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022195.函数的重载doublemax(doublea,dou5.函数的重载longmax(longa,longb,longc)

//定义求3个长整数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022205.函数的重载longmax(longa,longb,5.函数的重载运行情况如下:185-76567↙(输入3个整数)56.8790.23-3214.78↙(输入3个实数)67854-912456673456↙(输入3个长整数)i_max=567(输出3个整数的最大值)d_max=90.23(输出3个双精度数的最大值)g_max=673456(输出3个长整数的最大值)12/2/2022215.函数的重载运行情况如下:12/1/2022215.函数的重载上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。重载函数除了允许参数类型不同以外,还允许参数的个数不同。参见教材P13的例1.7intmax(inta,intb,intc)intmax(inta,intb)参数个数不同12/2/2022225.函数的重载上例3个max函数的函数体是相同的,其实重载函5.函数的重载注意:(1)重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同;函数返回值类型可以相同也可以不同。(2)在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。12/2/2022235.函数的重载注意:12/1/2022236.函数模板(1)函数模板(functiontemplate)的含义所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。12/2/2022246.函数模板(1)函数模板(functiontemplat6.函数模板定义函数模板的一般形式为:template<typenameT>通用函数定义

或template<classT>通用函数定义类型参数可以不只一个,可以根据需要确定个数。如:template<classT1,typenameT2>12/2/2022256.函数模板定义函数模板的一般形式为:12/1/202226.函数模板例P14的1.8将例1.6程序改为通过函数模板来实现。#include<iostream>usingnamespacestd;template<typenameT>//模板声明,其中T为类型参数Tmax(Ta,Tb,Tc)//定义一个通用函数,用T作虚拟的类型名{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022266.函数模板例P14的1.812/1/2022266.函数模板intmain(){inti1=185,i2=-76,i3=567,i;doubled1=56.87,d2=90.23,d3=-3214.78,d;longg1=67854,g2=-912456,g3=673456,g;i=max(i1,i2,i3);//调用模板函数,此时T被int取代d=max(d1,d2,d3);//调用模板函数,此时T被double取代g=max(g1,g2,g3);//调用模板函数,此时T被long取代cout<<″i_max=″<<i<<endl;cout<<″f_max=″<<f<<endl;cout<<″g_max=″<<g<<endl;return0;}12/2/2022276.函数模板intmain()12/1/2022277.有默认参数的函数一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。12/2/2022287.有默认参数的函数一般情况下,在函数调用时形参从实参那里取7.有默认参数的函数比如:有一函数声明floatarea(floatr=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如:

area();//相当于area(6.5);如果不想使形参取此默认值,则通过实参另行给出。如:area(7.5);//形参得到的值为7.5,而不是6.5这种方法比较灵活,可以简化编程,提高运行效率。12/2/2022297.有默认参数的函数比如:有一函数声明12/1/2022297.有默认参数的函数如果有多个形参,可以使每个形参有一个默认值,也可以只对一部分形参指定默认值,另一部分形参不指定默认值。注意:实参与形参的结合是从左至右顺序进行的。因此指定默认值的参数必须放在形参表列中的最右端,否则出错。12/2/2022307.有默认参数的函数如果有多个形参,可以使每个形参有一个默认7.有默认参数的函数例如:voidf1(floata,intb=0,intc,chard=′a′);//不正确voidf2(floata,intc,intb=0,chard=′a′);//正确如果调用上面的f2函数,可以采取下面的形式:f2(3.5,5,3,′x′)//形参的值全部从实参得到f2(3.5,5,3)//最后一个形参的值取默认值′a′f2(3.5,5)//最后两个形参的值取默认值,b=0,d=′a′12/2/2022317.有默认参数的函数例如:12/1/2022317.有默认参数的函数在使用带有默认参数的函数时有两点要注意:(1)如果函数的定义在函数调用之前,则应在函数定义中给出默认值。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。(2)一个函数不能既作为重载函数,又作为有默认参数的函数。因为当调用函数时如果少写一个参数,系统无法判定是利用重载函数还是利用默认参数的函数,出现二义性,系统无法执行。12/2/2022327.有默认参数的函数在使用带有默认参数的函数时有两点要注意:8.函数的嵌套调用嵌套调用函数虽然C++不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。见图3。图3函数嵌套调用图12/2/2022338.函数的嵌套调用嵌套调用函数虽然C++9.函数的递归调用在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归(recursive)调用。C++允许函数的递归调用。例如:intf(intx){inty,z;z=f(y);//在调用函数f的过程中,又要调用f函数return(2*z);}什么是函数的递归调用?12/2/2022349.函数的递归调用在调用一个函数的过程中9.函数的递归调用以上是直接调用本函数,见图4。图5表示的是间接调用本函数。在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数。图4直接调用本函数图5间接调用本函数12/2/2022359.函数的递归调用以上是直接调用本函数,见图4。12/1/29.函数的递归调用例1.9用递归方法求n!。求n!可以用递推方法,即从1开始,乘2,再乘3……一直乘到n。求n!也可以用递归方法,即5!=4!×5,而4!=3!×4,…,1!=1。可用下面的递归公式表示:n!=1 (n=0,1)n·(n-1)! (n>1)花5分钟自己做一下,只写递归子程序。12/2/2022369.函数的递归调用例1.9用递归方法求n!。花5分钟自己做9.函数的递归调用程序如下:#include<iostream>usingnamespacestd;longfac(int);//函数声明intmain(){intn;//n为需要求阶乘的整数longy;//y为存放n!的变量cout<<″pleaseinputaninteger:″;//输入的提示cin>>n;//输入n

y=fac(n);//调用fac函数以求n!cout<<n<<″!=″<<y<<endl;//输出n!的值return0;}longfac(intn)//递归函数{longf;

if(n<0){cout<<″n<0,dataerror!″<<endl;//如果输入负数,报错并以-1作为返回值f=-1;}elseif(n==0||n==1)f=1;

//0!和1!的值为1elsef=fac(n-1)*n;

//n>1时,进行递归调用returnf;//将f的值作为函数值返回}12/2/2022379.函数的递归调用程序如下:longfac(intn)课后总结(1)C++对C的函数的扩充,包括:函数的强制声明、函数的重载、有默认参数的函数、函数模板。(2)函数参数的传递。(3)函数的嵌套调用和递归调用。12/2/202238课后总结12/1/202238精品课件!12/2/202239精品课件!12/1/202239精品课件!12/2/202240精品课件!12/1/202240课后作业P35:9、10

本讲结束12/2/202241课后作业12/1/202241第2讲

C++对C的函数的扩充及使用

2.1授课内容

C++对C的函数的扩充及使用,

包括以下几个主要部分:1.函数原型声明、函数定义及调用;2.函数的重载;3.有默认参数的函数;4.函数模板。

12/2/202242第2讲C++对C的函数的扩充及使用2.1授课内容12第2讲

C++对C的函数的扩充及使用

2.2授课要求1.掌握函数定义的格式,掌握函数原型声明及函数调用;2.掌握函数调用过程中参数传递的原理及有默认参数的函数调用;3.掌握全局变量和局部变量的使用;4.掌握函数重载的方法;5.掌握保留字inline的含义与使用;6.熟悉函数模板。12/2/202243第2讲C++对C的函数的扩充及使用2.2授课要求12第2讲

C++对C的函数的扩充及使用

2.3授课重点1.函数的声明、定义及调用;2.函数重载的方法。

2.4授课难点1.函数的嵌套和递归调用;2.函数模板。

12/2/202244第2讲C++对C的函数的扩充及使用2.3授课重点121.函数的声明一个C程序是由若干个函数组成的。C++面向过程的程序设计沿用了C语言使用函数的方法。在C++面向对象的程序设计中,主函数以外的函数大多是被封装在类中的。主函数或其他函数可以通过类对象调用类中的函数。

图1函数调用的示意图。

图112/2/2022451.函数的声明一个C程序是由若干个函数组成的。图112/1/1.函数的声明函数声明的格式:函数类型函数名(参数表);比如:intmax(intx,inty);voidcount();无参数,返回值也为空。12/2/2022461.函数的声明函数声明的格式:无参数,返回值也为空。12/1.函数的声明定义函数格式类型标识符函数名(形式参数表列){声明部分语句}

12/2/2022471.函数的声明12/1/202261.函数的声明例如:intmax(intx,inty)//函数首部,函数值为整型,有两个整型形参{intz;//函数体中的声明部分z=x>y?x:y;//将x和y中的大者的值赋给整型变量zreturn(z);//将z的值作为函数值返回调用点}C++要求在定义函数时必须指定函数的类型(即函数返回值类型)。12/2/2022481.函数的声明例如:12/1/202271.函数的声明注意:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明,这是强制性的(C语言是建议性的)。12/2/2022491.函数的声明注意:12/1/202282.形式参数和实际参数在调用函数时,大多数情况下,函数是带参数的。(1)形式参数:在定义函数时函数名后面括号中的变量名称为形式参数(formalparameter,简称形参)。(2)实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为实际参数(actualparameter,简称实参)。12/2/2022502.形式参数和实际参数在调用函数时,大多数情况下,函数是带参3.函数的调用(1)函数调用的一般形式函数名([实参表列])(2)函数调用的方式按函数在语句中的作用来分,可以有以下3种函数调用方式:A.函数语句把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。比如:printstar();12/2/2022513.函数的调用(1)函数调用的一般形式12/1/2022103.函数的调用B.函数表达式函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。比如:c=2*max(a,b);C.函数参数函数调用作为一个函数的实参。比如:m=max(a,max(b,c));//max(b,c)是函数调用,其值作为外层max函数调用的一个实参12/2/2022523.函数的调用B.函数表达式12/1/2022114.内置函数调用函数时需要一定的时间和空间的开销。图2表示函数调用的过程。

图2表示函数调用的过程12/2/2022534.内置函数调用函数时需要一定的时间和空间的开销。12/1/4.内置函数C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。(1)内置函数定义,这种嵌入到主调函数中的函数称为内置函数(inlinefunction),又称内嵌函数。(2)声明格式:只需在函数首行的左端加一个关键字inline即可。比如:inlineintmax(intx,inty);内置函数节省了时间开销,但需要更多的空间。12/2/2022544.内置函数C++提供一种提高效率的方法,即在编译时将所调用5.函数的重载(1)函数的重载的含义C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。在编程时,有时我们要实现的是同一类的功能,只是有些细节不同。12/2/2022555.函数的重载(1)函数的重载的含义12/1/2022145.函数的重载例如:希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者往往会分别设计出3个不同名的函数,其函数原型为:intmax1(inta,intb,intc);//求3个整数中的最大者doublemax2(doublea,doubleb,doublec);//求3个双精度数中最大者longmax3(longa,longb,longc);//求3个长整数中的最大者12/2/2022565.函数的重载例如:希望从3个数中找出其中的最大者,而每次求5.函数的重载例P12的1.6:求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)。intmax(inta,intb,intc);//函数声明doublemax(doublea,doubleb,doublec);//函数声明longmax(longa,longb,longc);//函数声明采用函数重载12/2/2022575.函数的重载例P12的1.6:求3个数中最大的数(分别考5.函数的重载#include<iostream>usingnamespacestd;intmain(){intmax(inta,intb,intc);//函数声明doublemax(doublea,doubleb,doublec);//函数声明longmax(longa,longb,longc);//函数声明inti1,i2,i3,i;cin>>i1>>i2>>i3;//输入3个整数i=max(i1,i2,i3);//求3个整数中的最大者cout<<″i_max=″<<i<<endl;doubled1,d2,d3,d;cin>>d1>>d2>>d3;//输入3个双精度数d=max(d1,d2,d3);//求3个双精度数中的最大者cout<<″d_max=″<<d<<endl;longg1,g2,g3,g;cin>>g1>>g2>>g3;//输入3个长整数g=max(g1,g2,g3);//求3个长整数中的最大者cout<<″g_max=″<<g<<endl;}P12例1.612/2/2022585.函数的重载#include<iostream>P1215.函数的重载intmax(inta,intb,intc)

//定义求3个整数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022595.函数的重载intmax(inta,intb,int5.函数的重载doublemax(doublea,doubleb,doublec)

//定义求3个双精度数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022605.函数的重载doublemax(doublea,dou5.函数的重载longmax(longa,longb,longc)

//定义求3个长整数中的最大者的函数{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022615.函数的重载longmax(longa,longb,5.函数的重载运行情况如下:185-76567↙(输入3个整数)56.8790.23-3214.78↙(输入3个实数)67854-912456673456↙(输入3个长整数)i_max=567(输出3个整数的最大值)d_max=90.23(输出3个双精度数的最大值)g_max=673456(输出3个长整数的最大值)12/2/2022625.函数的重载运行情况如下:12/1/2022215.函数的重载上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。重载函数除了允许参数类型不同以外,还允许参数的个数不同。参见教材P13的例1.7intmax(inta,intb,intc)intmax(inta,intb)参数个数不同12/2/2022635.函数的重载上例3个max函数的函数体是相同的,其实重载函5.函数的重载注意:(1)重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同;函数返回值类型可以相同也可以不同。(2)在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。12/2/2022645.函数的重载注意:12/1/2022236.函数模板(1)函数模板(functiontemplate)的含义所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。12/2/2022656.函数模板(1)函数模板(functiontemplat6.函数模板定义函数模板的一般形式为:template<typenameT>通用函数定义

或template<classT>通用函数定义类型参数可以不只一个,可以根据需要确定个数。如:template<classT1,typenameT2>12/2/2022666.函数模板定义函数模板的一般形式为:12/1/202226.函数模板例P14的1.8将例1.6程序改为通过函数模板来实现。#include<iostream>usingnamespacestd;template<typenameT>//模板声明,其中T为类型参数Tmax(Ta,Tb,Tc)//定义一个通用函数,用T作虚拟的类型名{if(b>a)a=b;if(c>a)a=c;returna;}12/2/2022676.函数模板例P14的1.812/1/2022266.函数模板intmain(){inti1=185,i2=-76,i3=567,i;doubled1=56.87,d2=90.23,d3=-3214.78,d;longg1=67854,g2=-912456,g3=673456,g;i=max(i1,i2,i3);//调用模板函数,此时T被int取代d=max(d1,d2,d3);//调用模板函数,此时T被double取代g=max(g1,g2,g3);//调用模板函数,此时T被long取代cout<<″i_max=″<<i<<endl;cout<<″f_max=″<<f<<endl;cout<<″g_max=″<<g<<endl;return0;}12/2/2022686.函数模板intmain()12/1/2022277.有默认参数的函数一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。12/2/2022697.有默认参数的函数一般情况下,在函数调用时形参从实参那里取7.有默认参数的函数比如:有一函数声明floatarea(floatr=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如:

area();//相当于area(6.5);如果不想使形参取此默认值,则通过实参另行给出。如:area(7.5);//形参得到的值为7.5,而不是6.5这种方法比较灵活,可以简化编程,提高运行效率。12/2/2022707.有默认参数的函数比如:有一函数声明12/1/2022297.有默认参数的函数如果有多个形参,可以使每个形参有一个默认值,也可以只对一部分形参指定默认值,另一部分形参不指定默认值。注意:实参与形参的结合是从左至右顺序进行的。因此指定默认值的参数必须放在形参表列中的最右端,否则出错。12/2/2022717.有默认参数的函数如果有多个形参,可以使每个形参有一个默认7.有默认参数的函数例如:voidf1(floata,intb=0,intc,chard=′a′);//不正确voidf2(floata,intc,intb=0,chard=′a′);//正确如果调用上面的f2函数,可以采取下面的形式:f2(3.5,5,3,′x′)//形参的值全部从实参得到f2(3.5,5,3)//最后一个形参的值取默认值′a′f2(3.5,5)//最后两个形参的值取默认值,b=0,d=′a′12/2/2022727.有默认参数的函数例如:12/1/2022317.有默认参数的函数在使用带有默认参数的函数时有两点要注意:(1)如果函数的定义在函数调用之前,则应在函数定义中给出默认值。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。(2)一个函数不能既作为重载函数,又作为有默认参数的函数。因为当调用函数时如

温馨提示

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

评论

0/150

提交评论