网站大量收购独家精品文档,联系QQ:2885784924

[工学]c++ 第五章 函数.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]c第五章函数

程序中不断到设备中读取数据,频繁调用isnumber()函数。为了提高效率,可将程序改为: #include iostream.h void main() { char c; while((c=cin.get())!=\n) { if((c=‘0’ c=‘9’)? 1:0) //修改处:直接计算表达式 cout you entered a digit\n; else cout you entered a non_digit\n; } } 该程序在if语句中用表达式替换了函数调用。在程序的运行上,提高了一些执行效率,因为免去了大量的函数调用的开销。 由于isnumber()比相应的表达式可读,所以若程序中多处出现isnumber()的替换,就会降低程序的可读性。我们既 要用函数调用来体现其结构化和可读性,又要使效率尽可能地高。 2.解决办法 将isnumber()函数声明为inline,即在函数声明和定义中: inline int isnumber(char); inline int isnumber(char c) { return (ch=‘0’ch=‘9’)?1:0; } 编译器看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用相应的一段代码来替换。内联函数可以在一开始仅声明一次。例如下面的代码表达了一个内联函数: #include iostream.h inline int isnumber(char); //inline函数声明 void main() { char c; while((c=cin.get())!=\n) { if( isnumber(c) ) //调用一个小函数 cout you entered a digit\n; else cout you entered a non_digit\n; } } int isnumber(char ch) //此处无inline,视为inline { return (ch=0 ch=9)? 1:0; } 3.先声明后调用 内联函数必须在被调用之前声明或定义。因为内联函数的代码必须在被替换之前已经生成被替换的代码,因此,下面的代码不会像预计的那样被编译: #include iostream.h int isnumber(char); //此处无inline void main() { char c; while((c=cin.get())!=\n) { if( isnumber(c) ) //调用一个小函数 cout you entered a digit\n; else cout you entered a non_digit\n; } } inline int isnumber(char ch) //此处为inline { return (ch=0 ch=9)? 1:0; } 编译程序不认为那是内联函数,对待该函数如普通函数一样,产生该函数的调用代码,并进行连接。 4.内联函数的函数体限制 内联函数中,不能含有复杂的结构控制语句,如switch和while。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码。 另外,递归函数(自己调用自己的函数)是不能被用来做内联函数的。 内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。 5.8重载函数 1.重载的需要性 在C中,每个函数必须有其唯一的名字,但有时,这会令人生厌。 例如,求一个数的绝对值,由于命名唯一,所以对于不同的类型需要不同名字的函数: int ads(int); long labs(long); double fabs(double); 这几个函数所做的事情是一样的,都是求绝对值。因此,使用3个不同的函数名,看上去很笨拙,若能以同样的名字就会方便很多。对于在不同类型上作不同运算而又用同样的名字的情况,则称之为重载。 例如,上述3个函数的声明可以改为:

文档评论(0)

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

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

1亿VIP精品文档

相关文档