版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、06:57:36,1,C+程序设计教程(第二版),第五章 函数机制 Chapter 5 Function Mechanism,清华大学出版社 钱 能,06:57:36,2,函数 C+的函数是完成既定任务的功能(过程)体,它涵盖了数学函数和一般过程所以基于过程编程本质上就是基于函数编程 函数机制 一是指程序运行过程中对函数调用的数据管理和处理过程 二是指编程中函数的使用规范它包括函数参数的属性和传递规则,函数返回类型的匹配与审查,函数名字的识别原则,函数体效率的选择,函数体中数据的访问权限等,06:57:36,3,第五章内容,函数性质( Function Character ) 指针参数 ( P
2、ointer Parameters ) 栈机制 ( Stack Mechanism ) 函数指针 ( Function Pointers ) main参数 ( The mains Parameters ) 递归函数 ( Recursive Functions ) 函数重载 ( unction Overload ),06:57:36,4,1. 函数性质 ( Function Character ),函数:对输入参数负责,埋头做自己的事,最终返回结果 函数组织:通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构 做法:将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分
3、工,06:57:36,5,跨越数学函数的C+函数,有四种形态,返回类型 func ( 参数列表 ) ; 返回类型 func ( ) ; void func ( 参数列表 ) ; void func ( ) ;,06:57:36,6,黑盒原则:函数使用者应关注性能,而少去左右实现细节,int cost ( int n, int m ) return n*10; / 运输n次m斤 int cost ( int n, int m ) return m*10; / 运输m次n斤 / 选择下一个最好的 int cost ( int n, int m ) return (nm? m:n)*10; / 保证
4、运输次数最少 ,06:57:36,7,参数传递:形参是对实参的克隆,克隆必须遵守类型匹配规则,void f(Type a); /a为形参 void g() Type x; f(x); /x为实参 ,a实体,x实体,复制,Type类型,Type类型,06:57:36,8,. 指针参数 ( Pointer Parameters ),传递指针:指针参数也是值传递的,指针值的真正用途是进行数据间访,以达到操作数据块(大小由之)的目的 传递引用:引用参数本质上也是值传递的,它表现为名字传递,即以形参的名字来代替实参名字如果实参不是实体名而是表达式,那么其表达式所对应的临时实体取名为形参,并要求其为常量引
5、用 意义:指针和引用参数的存在,使函数实际上可以访问非局部的数据区,函数的黑盒性便名存实亡但这并非一定坏事,指针是一把双刃剑,或灵巧或邪恶引用是为了防范指针非安全的无意操作,06:57:36,9,void mySort(int* b, int size); void f() int a = 3, 5, 7, 1, 8, 4, 9; mySort(a, sizeof(a)/sizeof(a0); ,传递指针须附带传递单位数据的个数,元素个数,传指针,06:57:36,10,限制无意操作带来的意外副作用,vector add( / 向量加法 const vector ,06:57:36,11,3.
6、 栈机制 ( Stack Mechanism ),运行时内存布局,06:57:36,12,未初始化局部数据的不确定性,#include void f() int b; / 未初始化 std:cout”a“n”; f(); /- / 8804248 / 2788048,06:57:36,13,#include int a=5; int b=6; int main() int* ap=(int*)4202660; *ap=8; std:couta“n”; std:coutint( / 8 / 4202664,指针的无约束性,5,6,4202660,4202664,a,b,4202660,ap,06
7、:57:36,14,4. 函数指针 ( Function Pointers ),函数类型:函数类型因参数类型、个数和排列顺序的不同而不同,也因返回类型的不同而不同 函数指针:指向代码区中函数体代码的指针.不同的函数类型,其函数指针也不同 用法:函数指针经常用作函数参数,以传递连函数本身都不知道的处理过程(函数),06:57:36,15,不同的函数指针,不能相互赋值,int g(int); int (*gp)(int) = g; void f(); void (*fp)(); fp = f; gp = fp; / error,不同的函数,06:57:36,16,函数指针作为参数传递 (函数名看作
8、是函数指针),bool lessThanBitSum(int a, int b) int suma=0, sumb=0; for(int x=a; x; x/=10) suma += x%10; for(int x=b; x; x/=10) sumb += x%10; return suma sumb; int main() int a = 33, 61, 12, 19, 14, 71, 78, 59; sort(aa, aa+8, lessThanBitSum); for(int i=0; i8; +i) coutaai ; coutn; / 12 14 33 61 71 19 59 78,
9、06:57:36,17,指定函数指针类型,定义函数指针数组,typedef void (*MenuFun)(); void f1() coutgood!n; void f2() coutbetter!n; void f3() coutab;) couta+bf0509 abc.txt 17 21 357,06:57:36,20,main函数参数,/ f0510.cpp #include using anmespace std; int main(int argc, char* argv) for(int i=0; iargc; +i) coutargvif0510 a1 a2 a3 f0510
10、 a1 a2 a3,06:57:36,21,6. 递归函数 ( Recursive Functions ),形式上:一个正在执行的函数调用了自身(直接递归).或者,一个函数调用了另一个函数,而另一个函数却调用了本函数(间接递归) 本质上:程序在运行中调用了相同代码实体的函数,却在函数栈中重新复制了该函数的整套数据,由于每套数据中的参数也许不同,导致了计算条件发生变化,使得函数得以逐步逼近终极目标而运行,06:57:36,22,递归函数可以转换为非递归函数 例如,求最大公约数,long gcd1(int a, int b) / 递归版 if(a%b=0) return b; return gcd
11、(b, a%b); /- long gcd2(int a, int b) / 非递归版 for(int temp; b; a=b, b=temp) temp = a%b; return a; /-,06:57:36,23,7. 函数重载 ( Function Overload ),函数重载:一组概念相同,处理对象(参数)不同的过程,出于方便编程的目的,用同一个函数名字来命名的技术称为函数重载 参数默认:一个函数,既可以严谨和地道的调用,也可以省略参数,轻灵地调用,达到此种方便编程目的的技术称为参数默认 重载与参数默认:它们都是通过参数的变化来分辨处理任务的不同如果参数决定了不同的处理过程,则应重载,否则参数默认更简捷一些,06:57:36,24,重载是不同的函数,以参数的类型,个数和顺序来分辨,void print(double); void print(int); void func() print(1); / void print(int); print(1.0); / void print(double); print(a); / void print(int); print(3.1415f); / void pirnt(double); ,06:57:36,25,参数默认是通过不同参数来分辨一个函数调用中的行为差异,void delay(int a =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学五年级道德与法治 古代科技耀我中华-改变世界的四大发明 创新教案
- 26.2.1 二次函数y=ax^2的图象和性质 教学设计
- 数据治理框架在数字化转型中的协同作用研究
- 住宅室内装饰工程全流程管理与实施路径分析
- 基于数字化转型的供应链管理协同优化机制研究
- 电机铁芯冲压结构件企业ESG实践与创新战略分析报告
- 清远市清新县2027届数学六年级第一学期期末质量跟踪监视试题含解析
- 教育机构教研员教研活动绩效衡量表
- 智能客服系统优化与服务提升方案
- (2025年)教育惩戒规则测试题及答案
- 2026年内蒙古高考(化学)真题试卷带答案
- 蓬溪县国有资产监督管理局 面向社会公开招聘国有企业工作人员的(10人)考试备考题库及答案详解
- 绍兴市城市发展集团有限公司招聘考试笔试试题
- 2026年招标采购从业人员《招标采购专业实务(初级)》考试真题(附答案解析)
- 2026烟台辅警笔试题库
- 上海市河道维修养护管理技术规程
- 2026金华兰溪市机关事业单位编外招聘20人笔试参考题库及答案解析
- 2025年华东政法插班生笔试及答案
- 精神科患者噎食应急预案演练脚本
- 塔吊安装、使用、拆卸监理实施细则
- 2026年制式离婚协议书民政局备案版
评论
0/150
提交评论