版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函数与函数模板,1、函数的介绍,函数这个词是由英文function翻译过来的,顾名思义一 个函数就是一个功能。 一个程序文件包含若干个函数,但只能有一个main函数。 程序总是从main函数开始执行的。在C+面向对象的程序 设计中,主函数以外的函数大多是被封装在类中的,函 数可以通过类对象调用类中的函数。,1.1函数的分类,函数从用户使用的情况来分可以分为两种 (1)系统函数,即库函数 (2)用户自己定义的函数 从函数的形式看,函数分两类: (1)无参函数 (2)有参函数,1.2函数的一般形式,1.2.1定义无参函数的一般形式 类型标识符 函数名(void) 声明部分 语句 Void可以省略
2、例如:void print(void) cout“HELLO”endl; ,类型标识符 函数名(形式参数表列) 声明部分 语句 例如: Int max(int x,iny) int z; Z=xy? x:y; Return(z); C+中要求在定义函数时必须指定函数的类型。,1.2.2定义有参函数的一般形式,2、函数的返回值,定义:通过函数调用使主函数能得到一个确切的函数 值,这就是函数的返回值。 函数的返回值是通过函数中的return语句获得,return语句将被调用函数中的一个确切值带回主调函数中去。 函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。
3、 return语句后面的括号可以要也可以不要,如return z;return (z)等价,return后面的值可以是一个表达式。例如: int max (int x,int y) return(xy?x:y); ,函数值类型 : int max(float x,float y) /函数值的类型为整形 char letter(char c1,c2)/函数值的类型为字符型 如果函数值的类型和return语句中的表达式的值不一致,则 以函数类型为准,即函数类型决定返回值的类型。对数值类 型的数据可以自动进行类型转换。 例如: int max (int x,int y) float z; z=xy?
4、x:y; return z; Return语句返回z的值是先把float型转换成整型,再把整型值返回,2.1 返回值的类型,3、函数的调用,3.1函数调用的一般形式 函数名(实参表列) 如果是调用无参函数,实参表列可以没有,但是括号不 能省略。包含多个实参,中间用逗号隔开。 (1)函数调用单独作为一个语句,并不要求函数带回一个值,只要求函数完成一个功能。print(); (2)函数在一个表达式中,要求函数带回一个值以参加表达式的运算。c=2*max(a,b); (3)函数调用作为一个函数的实参。 m=max(a,max(b,c);,在一个函数中调用另一个函数需要具备的条件 (1)被调用函数必须
5、是已经存在的函数 (2)如果使用库函数,一般还应该在本文件开头用 #include命令将有关文件包含到本文件中来。 (3)如果使用用户之间定义的函数,而该函数与调用他 的函数在同一个程序单位中,且位置在主函数之 后,则必须在调用此函数之前对被调用的函数作声 明。,3.2被调用函数的声明和函数原型,#include using namespace std; int main() float add (float x,float y); /对add函数作声明 float a=2.3,b=3.1,c; c=add(a,b); cout“sum=”cendl; return 0; float add
6、(float x,float y) /定义add函数 float z; z=x+y; return (z); ,例:对被调函数作声明,4、函数的重载,定义:C+允许用同一个函数名定义多个函数,这些函数 的参数个数和参数类型不同。这就是函数的重载。 (function overloading)。所谓的重载就是“一物多 用”。 注意:重载函数允许参数的类型不同,也可以允许参数 的个数不同。但是不能只有函数的类型不同而参 数的格式和类型相同,例如以下的重载是不正确的: int f(int); long f(int); void f(int); 在函数调用时都是同一形式,编译无法判别应该调用哪一个函数
7、。重载函数的参数个数,参数类型或函数顺序中必须至少有一种不同函数的返回值类型可以相同也可以不同。,例:求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=185,i2=-76,i3=567,i; double d1=56.87,d2=90.23,d3=-3214.78,d;
8、long g1=67854,g2=-912456,g3=673456,g; i=max(i1,i2,i3); /求3个整数中的最大值 d=max(d1,d2,d3); /求3个双精度数中的最大值 g=max(g1,g2,g3); /求3个长整形中的最大值 couti_max=iendl; coutd_max=dendl; coutg_max=gendl; return 0; ,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,doubl
9、e c) /求3个双精度数中的最大值的函数 if(ba)a=b; if(ca)a=c; return a; long max (long a,long b,long c) /求3个长整形中的最大值的函数 if(ba)a=b; if(ca)a=c; return a; Main函数3次调用max函数,而每次的实参类型不同,系统会根据实参的类型找到与之匹配的函数,然后调用该函数。,(2)输入2个整数时,程序就输出这两个整数中的最大数,如果输 入 3个数,程序就输出这3个整数中的最大数。,#include using namespace std; int main() int max (int a,
10、int b,int c); /函数的声明 int max (int a,int b); /函数的声明 int a=185,b=-76,c=67; couta)a=b; if(ca)a=c; return a; int max (int a,int b) /求2个整数中的最大值的函数 if(ab) return a; else return b; ,5、函数模板,C+中的函数模板是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用模板就称函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在一个模板中定义一次即可。 定义函数模板的一般形式:
11、 Template 或template typename 和class都是表示类型名。这边的class不是值类 。 注:函数模板只使用于函数体相同,函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。,例:应用函数模板求3个数中最大的数,分别考虑整数、双精度数。,#include using namespace std; template T max(T a,T b,T c) if(ba) a=b; if(ca) a=c; return a; ,int main() int i1=185,i2=-76,i3=567,i; double d1=56.87,d2=90.23,
12、d3=-3214.78,d; long g1=67854,g2=-912456,g3=673456,g; i=max(i1,i2,i3); d=max(d1,d2,d3); g=max(g1,g2,g3); couti_max=iendl; coutd_max=dendl; coutg_max=gendl; return 0; ,6、局部变量和全局变量,6.1局部变量 在一个函数内部定义的变量是内部变量,他只在本函数范围内有 效,在此函数以外是不能使用这些变量的。同样在复合语句中定义 的变量只在本复合语句范围内有效。这称为局部变量。 float f1(int a) int b,c; . . .
13、 ,int main() int m,n; . . . int p,q; . . . ,注: (1)主函数中定义的变量(m,n)也只在主函数中有效,主函数也不能使用其他函数中定义的变量。 (2)不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰。它们在内存中占不同的单元,不会混淆。 (3)可以在一个函数内的复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为分程序或程序块。 (4)形式参数也是局部变量。 (5)在函数声明中出现的参数名,其作用范围只在本行的括号内。实际上,编译系统对函数声明中的变量名是忽略的,即使在调用函数时也没有为它们分配存储单元。,int max (
14、int a,int b); /函数声明中出现a,b int max (int x,int y) /函数定义,形参是x,y coutxyendl; /合法,x,y在函数体中有效 coutabendl; /非法,a,b在函数体中无效 编译时认为max函数体中的a和b未经定义。,在函数内定义的变量是局部变量,而在函数之外 定义的变量是外部变量。称为全局变量(global variable)。 全局变量的有效范围为定义变量的位置开始到本 源文件介绍。,6.2全局变量,int p=1,q=5; float f1(a) int a; int b,c; char c1,c2; char f2 (int x,
15、int y) int I,j; main () int m,n; ,判断哪些是全局变量,哪些是局部变量,及其范围。,p,q,c1,c2都是全局变量,但他们的作用范围不同,在main函数和f2函数中可以使用全局变量p,q,c1,c2,但是在函数f1中只能使用全局变量p,q,而不能使用c1,c2。,7、变量的存储类别,7.1动态存储方式和静态存储方式 (1)静态存储方式(static storage duration):指在程序运行期间,系统对变量分配固定的存储空间。 (2)动态存储方式(dynamic storage duration):是程序运行期间,系统对变量动态地分配存储空间。 (3)内存
16、中供用户使用的存储空间:,全局变量存放在静态存储区,函数形式参数 未加static声明的局部变量 函数调用时的现场保护和返回地址,定义:函数中局部变量的值在函数调用结束后不消失而 保留原值,其占用的存储单元不释放,在下一次 函数调用时,该变量保留上一次函数调用结束时 的值。,7.2用static声明静态局部变量(static local variable),#include Using namespace std; Int f (int a) int b=0; static int c=3; b=b+1; c=c+1; return a+b+c; Int main() int a=2,i; for(i=0;i3;i+) coutf(a)“ ”; coutendl; return 0; ,运行结果 7 8 9,1、外部函数:如果在函数首部的最左端冠以extern,则表示此函数是外部函数,可供其他文件使用。 格式:extern 类型标识符 函数名(形参名) extern int fun (int a ,int b ) 如果定义时省略了extern默认是外部函数。 2、内部函数:如果一个函数只能被本文件中的其他函数调用,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽滁州市中小学新任教师招聘240人备考题库【轻巧夺冠】附答案详解
- 2026广东高鲲能源数据投资有限公司招聘第四批人员6人备考题库及参考答案详解(综合卷)
- 2026年优信二手车合同(1篇)
- 2025-2026山东临沂市鲁南技师学院第二学期临时代课教师招聘1人备考题库(二)附完整答案详解(易错题)
- 2026云南玉溪市人力资源社会保障信息中心城镇公益性岗位招聘1人备考题库含答案详解【培优a卷】
- 2026河北雄安交通投资有限公司校园招聘2人备考题库有完整答案详解
- 2026河南周口市公益性岗位补录招聘37人备考题库及完整答案详解(名校卷)
- 2026年环保行业创新报告及废物回收技术应用报告
- 2026四川遂宁市就业服务管理局面向社会招聘1名编外人员备考题库及完整答案详解(有一套)
- 2026贵州黔东南州黄平县生态移民公益性岗位人员招聘1人备考题库ab卷附答案详解
- 2026内蒙古事业单位第一阶段改报岗位(公共基础知识)测试题附答案
- 公安交通集成指挥平台操作手册(扩充版)
- DB1307∕T455-2024 谷子品种 张杂谷13号
- 自愿放弃赡养权协议书
- 备战2026年高考数学考试易错题(新高考)专题14 排列组合与二项式定理(解析版)
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 2025年及未来5年中国对外劳务合作市场运行态势及行业发展前景预测报告
- 2025年招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案(山西阳泉)
- 老年痴呆合并激越行为护理查房
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
- 巡察底稿制作培训课件
评论
0/150
提交评论