第3章函数和函数模板3.1函数的定义与调用3.2函数参数的传递3.3函数调用机制3.4函数指针3.5内联函数和重载函数3.6变量存储特性与标识符作用域3.7多文件结构程序3.8命名空间3.9终止程序执行小结第3章函数和函数模板函数(Function)是功能抽象的模块函数参数返回值输入流输出流第3章函数和函数模板函数(Function)是功能抽象的模块函数作用——任务划分;代码重用函数是C++程序的重要组件函数定义由两部分组成:函数首部和函数操作描述函数调用是通过表达式或语句激活并执行函数代码的过程3.1函数的定义和调用//求圆柱体体积#includeiostreamusingnamespacestd;doublevolume(doubleradius,doubleheight){return3.14*radius*radius*height;}intmain(){doublevol,r,h;cinrh;vol=volume(r,h);coutVolume=volendl;}函数定义由两部分组成:函数首部和函数操作描述函数调用是通过表达式或语句激活并执行函数代码的过程3.1函数的定义和调用//求圆柱体体积#includeiostreamusingnamespacestd;doublevolume(doubleradius,doubleheight){return3.14*radius*radius*height;}intmain(){doublevol,r,h;cinrh;vol=volume(r,h);coutVolume=volendl;}函数定义函数定义由两部分组成:函数首部和函数操作描述函数调用是通过表达式或语句激活并执行函数代码的过程3.1函数的定义和调用//求圆柱体体积#includeiostreamusingnamespacestd;doublevolume(doubleradius,doubleheight){return3.14*radius*radius*height;}intmain(){doublevol,r,h;cinrh;vol=volume(r,h);coutVolume=volendl;}函数调用函数定义形式类型函数名(形式参数表){语句序列}3.1.1函数定义3.1.1函数定义函数定义形式类型函数名(形式参数表){语句序列}3.1.1函数定义函数头——函数接口,包括:3.1.1函数定义函数定义形式类型函数名(形式参数表){语句序列}3.1.1函数定义函数头——函数接口,包括:函数返回值类型函数体中由return语句返回的值的类型。没有返回值其类型为void3.1.1函数定义函数定义形式类型函数名(形式参数表){语句序列}3.1.1函数定义函数头——函数接口,包括:函数返回值类型函数体中由return语句返回的值的类型。没有返回值其类型为void函数名用户定义标识符3.1.1函数定义函数定义形式类型函数名(形式参数表){语句序列}3.1.1函数定义函数头——函数接口,包括:函数返回值类型函数体中由return语句返回的值的类型。没有返回值其类型为void函数名用户定义标识符形式参数表逗号分隔的参数说明表列,缺省形式参数时不能省略圆括号。一般形式为:类型参数1,类型参数2,…,类型参数n3.1.1函数定义函数定义形式3.1.1函数定义函数头——函数接口类型函数名(形式参数表){语句序列}函数体——函数的实现代码。3.1.1函数定义例3-13.1.1函数定义voidprintmessage(){coutHowdoyoudo!endl;}3.1.1函数定义例3-13.1.1函数定义voidprintmessage(){coutHowdoyoudo!endl;}函数返回值类型无返回值3.1.1函数定义例3-13.1.1函数定义voidprintmessage(){coutHowdoyoudo!endl;}函数名3.1.1函数定义例3-13.1.1函数定义voidprintmessage(){coutHowdoyoudo!endl;}形式参数表无参数3.1.1函数定义例3-13.1.1函数定义voidprintmessage(){coutHowdoyoudo!endl;}函数体无return语句3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}函数返回值类型3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}函数名3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}形式参数表3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}函数体3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}返回值return语句形式:return表达式或return(表达式)作用:•返回函数值•不再执行后续语句,程序控制返回调用点一个函数体内可以有多个return语句•表达式返回值的类型与函数类型不相同时,自动强制转换成函数的类型3.1.1函数定义例3-23.1.1函数定义doublemax(doublex,doubley){if(xy)returnx;elsereturny;}TypeFunctionName(){//statementsreturnexpression;}voidFunctionName(){//statementsreturn;//可省略}3.1.1函数定义调用形式函数名(实际参数表)3.1.2函数调用3.1.2函数调用调用形式函数名(实际参数表)3.1.2函数调用函数名函数的入口地址3.1.2函数调用调用形式函数名(实际参数表)3.1.2函数调用函数名函数的入口地址实际参数表与形式参数必须在个数、类型、位置一一对应3.1.2函数调用调用形式函数名(实际参数表)3.1.2函数调用函数名函数的入口地址实际参数表与形式参数必须在个数、类型、位置一一对应3.1.2函数调用用表达式或语句形式调用;若函数返回值类型为void,则只能用语句调用3.1.2函数调用#includeiostreamusingnamespacestd;voidprintmessage(){coutHowdoyoudo!endl;}intmain(){printmessage();}例3-13.1.2函数调用3.1.2函数调用#includeiostreamusingnamespacestd;voidprintmessage(){coutHowdoyoudo!endl;}intmain(){printmessage();}函数调用语句例3-13.1.2函数调用3.1.2函数调用例3-2#includeiostreamusingnamespacestd;doublemax(doublex,doubley){if(xy)returnx;elsereturny;}intmain(){doublea,b;cinab;doublem=max(a,b);coutmax(m,3.5)endl;}3.1.2函数调用3.1.2函数调用例3-2#includeiostreamusingnamespacestd;doublemax(doublex,doubley){if(xy)returnx;elsereturny;}intmain(){doublea,b;cinab;doublem=max(a,b);coutmax(m,3.5)endl;}函数调用表达式3.1.2函数调用3.1.2函数调用例3-2#includeiostreamusingnamespacestd;doublemax(doublex,doubley){if(xy)returnx;elsereturny;}intmain(){doublea,b;cinab;doublem=max(a,b);coutmax(m,a+3.5)endl;}coutmax(max(a,b),a+3.5)endl;实际参数是表达式3.1.2函数调用3.1.3函数原型函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序编译器根据函数原型检查函数调用的正确性函数原型的形式:类型函数名(形式参数表);3.1.3函数原型3.1.3函数原型函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序编译器根据函数原型检查函数调用的正确性函数原型的形式:类型函数名(形式参数表);函数原型是声明语句3.1.3函数原型3.1.3函数原型#includeiostreamusingnamespacestd;doublemax(double,double);//函数原型intmain(){doublea,b,c,m1,m2;coutinputa,b,c:\n;cinabc;m1=max(a,b);//函数调用m2=max(m1,c);coutMaximum=m2endl;}doublemax(doublex,doubley)//函数定义{if(xy)returnx;elsereturny;}使用函数原型3.1.3函数原型3.1.3函数原型#includeiostreamusingnamespacestd;doublemax(double,double);//函数原型intmain(){doublea,b,c,m1,m2;coutinputa,b,c:\n;cinabc;m1=max(a,b);//函数调用m2=max(m1,c);coutMaximum=m2endl;}doublemax(doublex,doubley)//函数定义{if(xy)returnx;elsereturny;}函数原型的参数表不需要参数名使用函数原型3.1.3函数原型3.1.3函数原型#includeiostreamusingnamespacestd;doublemax(double,double);//函数原型intmain(){doublea,b,c,m1,m2;coutinputa,b,c:\n;cinabc;m1=max(a,b);//函数调用m2=max(m1,c);coutMaximum=m2endl;}doublemax(doublex,doubley)//函数定义{if(xy)returnx;elsereturny;}函数调用出现在定义之前函数原型声明是必须的使用函数原型3.1.3函数原型3.1.3函数原型函数定义在调用之前#includeiostreamusingnamespacestd;doublemax(doublex,doubley)//函数定义{if(xy)returnx;elsereturny;}intmain(){doublea,b,c,m1,m2;coutinputa,b,c:\n;cinabc;m1