- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 函数 第六章 函数 6.1 函数的定义 6.2 函数的调用6.3 变量的作用域 6.4 递归函数6.5 函数重载6.6 函数模板6.7 函数指针 6.1 函数的定义 6.1.2 函数定义的说明 6. 2 函数的调用 调用过程: 6.3 变量的作用域 6.3.1 作用域分类 6.3.2 程序举例 6. 4 递归函数 6. 5 函数重载 注1:重载函数的形参必须不同,可以是形参个数的不同,也可以是形参的类型不同。返回值不同不能做为函数重载的条件 int add(int x,int y) void add(int x,int y) 注2:最好不要将不同功能的函数定义为重载函数,这样会出现调用的误解。 例如: int add(int x,int y) { return x + y ; } float add(float x,float y) { retrun x - y ; } 6. 6 函数模板 6. 6 函数指针 运行:x,y=10 20 x,y,::x=30 50 10 x,y=10 50 #includeiostream.h int x=10; void main() { int y=20; coutx,y=x yendl; { int x=30;y=y+x; coutx,y,::x=x y‘ ‘::xendl; } coutx,y=x yendl; } 程序6-11:P167页,(li6-11.cpp),学生自行分析。 程序6-12:P168页, (li6-12.cpp)引用调用,讨论形式 程序6-13:P169页, (li6-13.cpp)静态局部变量的使用,讨论 小结: 对象生存期:对象占用存储空间的持续时间。 全局变量、文件域变量、加入static的局部变量、利用new动态分配的对象,生存期从定义点开始直到整个程序结束。 可随时利用delete回收动态对象。 对于在任何函数体内定义的局部变量和值参(即非引用参数),它们的生存期从定义点开始到所在的复合语句块结束。 ??? 定义:在函数执行中又直接或间接地调用自己,若函数体中含有调用自身的函数调用表达式则称为直接调用,此称递归函数。递归函数举例:求n! 解题思路: (1) 用循环 for (int i=n;i0;i--) t=t*i; (2) n!=n*(n-1)!,用以下形式 ?? . 函数的调用形式 递归程序 int fan ( int n ) {if(n==0 || n==1)return 1;else return n*fan(n-1);} 注 1:调用过程,用f(5)去调用f(n),返回5*f(4)的值,接着调用f(4),返回4*f(3),依此类推,直到调用f(1),然后一步一步返回,最后结束整个调用过程。 注2:n=0或n=1是递归终止的条件。 注3:整个调用过程实际上是函数的嵌套调用,只不过函数名都是自己。必须有足够的堆栈空间。 例:求 分别输入m,k的值(m=k),求C(m,k)的值,学生自行完成程序。P172 注:通过循环完成数据输入和判断。 例:分别用递归算法和非递归算法完成一维数组中n个元素的和。 递归表达式F(a,n)=a[n-1]+f[a,n-1] 见P173页 1. 问题的提出:求最大值问题 (1) int Imax(int a[], int n);(2) double Dmax(double a[], int n);(3) char* Cmax(char* a[], int n); 这三个函数的功能都是相同的,但是因为不同的函数名,给使用带来了不方便,特别是在调用这些函数的时候,要根据操作数的不同而选择应该调用那一个函数。 2. 问题的解决: 两个以上的函数,取相同的函数名,但是形参的个数或类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。——同一个函数名对应着多个不同的函数实现。 int add(int x,int y) float add(float x,float y) int add(int x,int y,int z) 描述具有相同功能,但处理的数据类型是不同的这一类函数就称为函数重载. C++允许功能相近的函数在相同的作用域
文档评论(0)