C++课件chap4 函数.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子科技大学计算机学院 软件学院 面向对象程序设计语言C++ 电子科技大学计算机学院 软件学院 电子科技大学计算机学院 软件学院 第四章 函数 函数的定义和声明  定义函数的一般格式为: 返回类型 函数名 (数据类型1 参数1, 数据类型2 参数2,... ) {    函数体; } 形参表 返回类型:任意数据类型 函数名:符合C++标识符的一般命名规则 形参列表:需指定参数类型和参数名 函数体:语句序列 例子 #include iostream.h int max(int x,int y) { int z; z=(xy)?x:y; return z ; } void main() { int a,b; cinab; coutmax(a,b)endl; } 函数定义 函数体:函数所完成的具体操作 函数调用 * * 函数原型 函数原型的一般形式: 返回值类型 函数名(参数列表); 如果函数定义在先,调用在后,调用前可以不必声明;如果函数定义在后,调用在先,调用前必须声明。 int max(int, int);//或int max(int a,int b); void main(){ int value=max(5,6); } int max(int x, int y){......}; 加上参数名会使函数的 功能和参数更清晰。 函数调用的一般形式为: 各实际参数表中的实际参数应与形参表中的形参一一对应,即个数相等且对应参数的数据类型相同。 函数调用是一个表达式,函数名连同括号是函数调用运算符。表达式的值就是被调函数的返回值,它的类型就是函数定义中指定的函数返回值的类型,即函数的类型。 如果函数的返回值为void,说明该函数没有返回值。 例如:coutmax(a,b)endl; 函数调用 函数名 (参数1, 参数2,... ); 实际参数表 当一个程序准备运行时,操作系统会为程序分配一块内存空间,C++程序的内存通常被分为四个区: 全局数据区:存放全局变量、静态变量、字符串常量、常变量 代码区:存放代码 栈区:存放为运行函数而分配的函数参数、局部变量、返回地址等 堆区:用于动态内存分配 C++程序的内存空间 * * 函数参数的按值传递 函数参数传递过程的实质是将实参值通过栈空间一一传送给形参的过程。 例子:函数参数的按值传递 #includeiostream.h void swap(int a,int b) { int t; t=a, a=b, b=t; } void main() { int x=7,y=11; coutx=x y=yendl; swap(x,y); coutafter swap:; coutx=x y=yendl; } 函数定义 传值调用 函数的嵌套调用 在一个函数中调用其它函数叫函数的嵌套。 C++中函数的定义是平行的,除了main函数以外,都可以互相调用。 函数不可以嵌套定义,但可以嵌套调用。比如函数1调用了函数2,函数2再调用函数3,这便形成了函数的嵌套调用。 在调用一个函数的过程中又直接或间接地调用该函数本身的这一现象,叫做函数的递归调用。 1 (n=0) n!= n(n-1)! (n0) 递归可以分为: 直接递归调用:是在调用函数的过程中又调用该函数本身; 间接递归调用:是在调用f1()函数的过程中调用f2()函数,而f2()中又需要调用f1()。 递归调用 * * 内联函数 宏定义带来的问题 #define abs(a) ((a) 0 ? –(a):(a)) int i = -2, j; j = abs(++i); == j = ((++i) 0 ? –(++i) : (++i)) 最后j的值为是0。问题出在编译器在遇到宏时只是进行简单的宏替换。 * * 用inline定义一个内联函数 使用宏的好处是没有类似于普通函数调用时的系统开销,并且宏定义的参数可以适宜大多数类型的数据。但其缺点是有时会产生不可预料的副作用。 C++中的内联函数既具有宏定义的优点,又克服了宏定义的缺点。 在函数名前加上“inline”,即为内联函数。 inline void func(int a, int b); 因为是在编译时在调用func的地方用函数体进行了替换,所以程序执行时会减少调用开销。 * * 内联函数举例举例 inline

文档评论(0)

sunyi8246 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档