面向对象程序设计5-函数.pptVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象程序设计5-函数

第五章 函数 权巍 面向对象程序设计 C++函数有四种形态: 返回类型 func ( 参数列表 ); 返回类型 func ( ) ; void func ( 参数列表 ) ; void func ( ) 全局变量、局部变量、静态局部变量 ‘ * 面向对象程序设计 函数 主要内容 1 函数调用机制 2 递归函数 3 内联函数 4 重载函数与默认参数函数 * 面向对象程序设计 1 函数调用机制 运行时内存布局 存在程序的执行代码。由函数定义块得到。 全局数据、常量、静态全局量和静态局部量 存放动态数据 存放函数数据区,动态反映程序运行中的函数状态 栈区 进程空间 代码区 全局数据区 堆区 * 面向对象程序设计 面向对象程序设计 * 函数调用时,C++做以下工作: (1)建立被调函数的栈空间。 (2)保护调用函数的运行状态和返回地址 (3)传递参数 (4)将控制权转交给被调函数 (5)函数运行完成后,将返回值(若有)保护到临时变量空间中 (6)恢复调用函数的运行状态 * 面向对象程序设计 未初始化局部数据的不确定性(f0504) #includeiostream using namespace std; void f() { int b; coutB=bendl; }// void main() { int a; coutA=aendl; f(); }// * 面向对象程序设计 2 递归函数 形式上:一个正在执行的函数调用了自身(直接递归)。或者,一个函数调用了另一个函数,而另一个函数却调用了本函数(间接递归) 本质上:程序在运行中调用了相同代码实体的函数,却在函数栈中重新复制了该函数的整套数据,由于每套数据中的参数也许不同,导致了计算条件发生变化,使得函数得以逐步逼近终极目标而运行 * 面向对象程序设计 递归条件 (1)递归不能无限制地调用下去,因为栈空间是有限的。 (2)递归函数中必须有完成终极任务的语句序列,以使函数有意义。 (3)递归函数当然有递归调用语句。然而,递归调用应有参数,而且参数值应该是逐渐逼近停止条件的。 (4)递归条件应先测试,后递归调用。无条件递归的逻辑错误,编译器是检查不出来的,要靠程序员自己把握。 * 面向对象程序设计 递归函数可以转换为非递归函数 例如,求最大公约数 long gcd1(int a, int b) // 递归版 { if(a%b==0) return b; return gcd1(b, a%b); }//-------------------------- long gcd2(int a, int b) // 非递归版 { for(int temp; b; a=b, b=temp) temp = a%b; return a; }//-------------------------- * 面向对象程序设计 3 内联函数inline #include iostream using namespace std; int isnumber(char); void main() { char c; while((c=cin.get())!=\n) { if(isnumber(c)) coutyou entered a digit\n; else coutyou entered a non-digit\n; } } int isnumber(char ch) { return(ch=0 ch=9)?1:0; } * 面向对象程序设计 内联函数的应用场合: 使用频率高的小函数。 内联函数的重要性。 避免多次调用函数时,重复开辟栈内存带来的消耗 内联函数必须在调用前使用inline声明或定义,并且函数体不能含有复杂的控制语句。 面向对象程序设计 * #define MAX(a,b) ((a)(b)?(a):(b)) 问题:预处理阶段做简单替换,没有类型检查 即: int a=1; MAX(a,”Hello”); //编译通过 应使用内联函数,避免使用#define 面向对象程序设计 * 内联函数与#define 4 重载函数与默认参数函数 函数重载:一组概念相同,处理对象(参数)不同 的过程,出于方便编程的目的,用同一个函数名字 来命名的技术称为函数重载 参数默认:一个函数,既可以严谨的调用,也可以 省略参数,轻灵地调用,达到此种方便编程目的的 技术称为参数默认 重载与参数默认:它们都是通过参数的变化来分辨 处理不同的任务。如果参数决定了不同的处理过 程,则应重载,否则参数默认更简捷一些 重载的目的:通过自然描述函数名称来简化编程和 增强程序的可读性。 * 面向对象程序设计 重载是不同的函

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档