版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第03章函数-2-本章内容安排函数的概念函数的声明与定义函数中的变量函数返回值默认参数函数重载内联函数-3-什么是函数函数是C++程序的基本构成单元,函数对数据执行操作并返回处理结果。-4-什么是函数?每个程序中有且仅有1个main函数,其它函数可根据需要定义。程序运行时,系统会调用main函数,main函数执行结束后整个程序结束。main函数可调用其它函数,函数之间可以相互调用。每个函数都有名称,可用于调用它。函数被调用后,执行其中的语句,语句执行完或遇到return后返回到调用该函数的地方继续执行。-6-函数的声明函数在使用前必须被声明。函数的声明将函数的名称、返回的数据类型、函数参数类型告知编译器。intfindArea(intlength,intwidth);函数的返回类型:int函数名称:findArea函数的参数列表:类型为int的2个参数length和width函数的声明是1条语句,要以分号结尾。声明也叫原型,不
包含任何代码。函数可返回任意C++数据类型。如果函数不返回值,将返回
类型写为void,而不是空缺。函数名称、参数及其排列顺序构成了函数的签名,函数签名
唯一地标识了一个特定的函数。-7-函数的定义函数的定义给出函数的具体行为,函数定义包括函数头和函数体,函数体由若干语句构成,放在{}内。intfindArea(intl,intw){ intarea=l*w; returnarea;}函数头与函数原型类似,但结尾不能加分号。如果函数返回一个值,函数体内至少包含1条return语句,return语句可返回类型匹配的常量、变量、表达式结果。声明和定义的匹配函数的声明和函数的定义需要匹配,否则无法通过编译。匹配时检查返回值类型、函数名称、参数类型及顺序,但不用匹配参数名称。intfindArea(int,int);-8-函数声明可以只给出参数类型,但语义不够清晰,声明和定义处的参数名称可以不同,编译器忽略声明处的参数名称。函数名应符合标识符规则,还要养成良好的习惯,名字应能
体现函数的功能和目的,名字中间不能有空格。-9-函数的调用#include<iostream>intfindArea(intlength,intwidth);intmain(){ intlength,width; intarea; std::cout<<“Howwideisyouryard?“; std::cin>>width; std::cout<<“Howlongisyouryard?“; std::cin>>length; …}-10-函数的调用intmain(){ …
area=findArea(length,width); std::cout<<“Youryardis“<<area; std::cout<<“squarefeet.\n”; return0;}调用函数时传递的参数称为实参,函数体内的参数称为形参,
形参用于接收传入的实参值。如果将函数定义放在main函数之前,可以不写函数声明,但
不是一种良好的习惯。-11-本章内容安排函数的概念函数的声明与定义函数中的变量函数返回值默认参数函数重载内联函数局部变量函数体内创建的变量称为局部变量,局部变量只存在于函数内部,调用函数时局部变量被创建,函数返回后,所有局部变量被销毁,不能再被访问。函数的形参(接收并保存实参值)也是函数的局部变量。-12--13-局部变量的使用#include<iostream>floatconvert(float);intmain(){ floatfahrenheit,celsius; std::cout<<"EnterthetemperatureinFahrenheit:"; std::cin>>fahrenheit;
celsius=convert(fahrenheit); std::cout<<"TemperatureinCelsius:“ <<celsius<<"\n"; return0;}-14-局部变量的使用floatconvert(floatfahreheit){
floatcelsius; celsius=((fahreheit-32)*5)/9; returncelsius;}尽管实参变量和形参变量的名字都是fahreheit,它们是不
同的变量,main函数的中fahreheit将值复制给convert
函数中的fahreheit局部变量。变量作用域:变量存在的范围,块语句中声明的变量只能存在于当前块。全局变量C++中允许在函数外面定义变量,称为全局变量,全局变量在程序的任何地方都可使用。全局变量的作用域为全局,可以在程序的任何函数中被访问。-15--16-局部变量的使用#include<iostream>voidconvert();floatfahrenheit,celsius;intmain(){ std::cout<<"EnterthetemperatureinFahrenheit:"; std::cin>>fahrenheit;
convert(); std::cout<<"TemperatureinCelsius:“ <<celsius<<"\n"; return0;}-17-局部变量的使用voidconvert(){
celsius=((fahreheit-32)*5)/9;}在函数中直接操作全局变量,不用传递参数或返回值,表面
上方便省事。但在复杂程序中,全局变量会导致程序错误
难以修改(任意一条语句都有可能修改全局变量的值)良好编程习惯:应避免使用全局变量!!函数参数函数通过参数(形参)接收信息,函数可以包含多个参数,多个参数之间用逗号分割。函数调用时,提供值(实参)可以是常量、变量、表达式、其它函数调用的返回值。函数的形参属于函数的局部变量,函数返回后局部变量就被销毁,无法再访问了。-18-函数的参数传递#include<iostream>intmain(){ intx=5,y=4; std::cout<<“sum:“<<sum(x,y); return0;}intsum(inta,intb){ returna+b;}54mainsum54xyab-20-不成功的数据交换intx=4,y=13;swap(x,y);voidswap(intx,inty){ inttemp=x; x=y; y=temp;}swap函数的形参x、y,和调用处
的x、y虽然同名,但属于不同的
的变量。swap函数内部,对自己的局部变
量x和y进行交换,函数返回后,
调用处的x和y没有变化。-21-本章内容安排函数的概念函数的声明与定义函数中的变量函数返回值默认参数函数重载内联函数从函数返回值函数可以返回一个值或不返回值(用void表示)使用return关键词从函数返回值,返回的值可以是常量、变量、表达式、其它函数调用的返回值。遇到return语句后,将立即返回到调用函数语句处,return之后的所有语句不再执行。-22--23-判断是否闰年?boolisLeapYear(intyear){
if(year%4==0) {
if(year%100==0) {
if(year%400==0) returntrue; else returnfalse; } else returntrue; } else returnfalse;}闰年的两个基本条件1)能被4整除,但不不能被100整除2)能被4、100和400同时整除只要执行到4个return语句中的一个,
函数立即返回。-24-判断是否闰年?#include<iostream>boolisLeapYear(intyear);intmain(){ intinput; std::cout<<"Enterayear:"; std::cin>>input;
if(isLeapYear(input)) std::cout<<input<<"isaleapyear.\n"; else std::cout<<input<<"isnotaleapyear.\n"; return0;}-25-本章内容安排函数的概念函数的声明与定义函数中的变量函数返回值默认参数函数重载内联函数形参和实参的匹配在原型中将函数声明为接收一个或多个参数时,调用函数时必须使用数据类型匹配的实参。
boolisLeapYear(intyear);调用isLeapYear函数时,必须提供一个类型为int的实参。如果调用时传递的参数少了、多了或者类型不匹配,编译器将报错。
isLeapYear();//调用函数-26-X形参和实参的类型并不要求严格相同,如实参为float类型
形参可以为double类型,系统会自动转换。只有当类型不
兼容时,编译器才会报错。良好编程习惯:形参和实参类型保持一致。指定参数默认值如果在函数声明中指定了参数的默认值,调用函数时可以不传递相应的实参,此时使用默认值作为实参传递给函数。
boolisLeapYear(intyear=2011);
isLeapYear();//调用函数
isLeapYear(2011);
-27-在函数原型中声明缺省值,在函数定义处无需定义缺省值。默认值规则如果函数有多个参数,可以分别为其指定默认值。规则:从某个参数开始,右侧的所有参数都必须指定默认值。 longset4Point(intx,inty,intz,intt);
longset4Point(intx,inty,intz=10,intt);
longset4Point(intx,inty,intz=10,intt=300); set4Point(130,35); set4Point(130,35,10,300); -28-X√-29-默认值示例#include<iostream>intfindArea(intlength,intwidth=20,intheight=10);intmain(){ intlength=10,width=5,height=2; intarea;
area=findArea(length,width,height); std::cout<<"FirstArea:"<<area<<std::endl;
area=findArea(length,width); std::cout<<"SecondArea:"<<area<<"\n";
area=findArea(length); std::cout<<"ThirdArea:"<<area<<"\n"; return0;}-30-默认值示例intfindArea(intlength,intwidth,intheight){ returnlength*width*height;}只在原型中指定默认值,函数定义中不能指定默认值。例外
情况,当将函数定义在调用代码的上方时,可以省略原型,
此时需要在函数定义中(函数头)指定默认值。良好编程习惯:为所有函数提供原型,在原型中指定默认值
调用函数时,系统用原型中默认值作为实参调用函数。-31-本章内容安排函数的概念函数的声明与定义函数中的变量函数返回值默认参数函数重载内联函数函数重载的概念C++中允许定义多个同名的函数,但它们的参数不同,称为函数重载。参数不同分下面几种情况:参数类型不同参数数量不同数量和类型均不同intstore(int,int);intstore(long,long);intstore(long);-32-函数重载的匹配调用store函数,编译器将根据传递的实参数据类型和数量确定调用哪个版本的store。不能通过函数返回值类型判断重载函数的版本,如果两个同名函数的参数类型和个数一致,而返回值类型不同,编译器将报错。
intmyFun(int,int); floatmyFun(int,int);-33-X函数重载的用途通过函数重载,可以创建针对不同数据类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度企业间供应链融资合同续签指南
- 二零二五年度房屋租赁中介合同示范文本12篇
- 教育培训数字化教学与培训服务优化解决方案
- 客户生命周期管理在金融行业的应用与创新研究
- 家校携手共建良好学习环境
- 课程设计三大思考
- 教育基金会合作协议
- 教育课程录制制作合同
- 基于实践的安全教育培训效果评估方法研究
- 家庭教育在预防心理疾病中的作用
- 新人教版一年级数学下册全册导学案
- 2025年中考语文复习之现代文阅读:非连续性文本阅读(10题)
- 普外科医疗组长竞聘演讲
- 北京市朝阳区2022-2023学年三年级上学期英语期末试卷
- GB/T 9755-2024合成树脂乳液墙面涂料
- 哔哩哔哩MATES人群资产经营白皮书【哔哩哔哩】
- 【历史】第一、二单元测试题2024~2025学年统编版七年级历史上册
- 婚姻家庭规划
- 认识实习报告(10篇)
- 【MOOC】内科护理学-中山大学 中国大学慕课MOOC答案
- 2024年商业地产买卖合同样本
评论
0/150
提交评论