OOP(C+)_第8章_函数和作用域、内联函数、重载函数(最终版).ppt

OOP(C+)_第8章_函数和作用域、内联函数、重载函数(最终版).ppt

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

Chapter 8 Technicalities: Functions, etc. Supplementation; 8.1 函数的定义和声明 8.2 函数的调用和参数传递方式 8.3 函数的默认参数 8.4 内联函数 8.5 函数重载 8.6 函数的作用域 ;8.1 函数的定义和声明;;;8.2 函数的调用与参数传递;8.2.1 函数的调用方法;8.2.1.1 函数的调用和返回序列;8.2.2 参数传递;8.2.2.1 传值调用-传值;执行过程;;执行过程;传值 vs 传指针;思考题1;答:程序崩溃。 因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。;思考题2;答:可能是乱码。 因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原先的内容已经被清除,新内容不可知。 ;思考题3;答: (1)能够输出hello (2)内存泄漏:退出test()后,malloc分配的空 间将无法释放。;思考题4;答:篡改动态内存区的内容,后果难以预料,非常危险。 因为free(str)之后,str成为未初始化的野指针,并不是NULL。因此if(str != NULL)将总是为真。;8.2.2.3 引用传递; 形式参数只是实参的别名,因此函数调用时不需要 为它分配空间;尤其是传递大的对象。 在函数内对参数值的改变不再作用于局部拷贝,而 是直接针对实参;但是相对于指针传递而言,引用 传递的函数体定义和函数调用的形式更为简洁。; ;8.2.2.5 使用数组作函数参数;例:;int a[8] ={1,3,5,7,9,11,13}; void fun( int *pa, int n){ for (int i= 0;in-1;i++){ *(pa + 7) += *(pa + i); } } void main( ){ int m =8; fun(a,m); cout a[7]endl; };8.2.3 函数参数的求值顺序;8.2.4 返回语句实现过程;8.3 作用域;8.3.1 作用域;8.3.2 作用域的屏蔽规则;8.3.2.1 :: 全局作用域分辨符;作用域: 函数级; 块级。 生命期: 自动类变量; 内部静态变量;全局变量与局部变量;全局变量与局部变量(续);文件级作用域;文件级作用域(续);文件级作用域(续);8.3.4 内部静态变量;8.3.5 寄存器变量;小结;小结(续);8.4 内联函数;8.8.1 内联函数(inline function);说明:;8.8.2 内联函数 vs 宏替换;8.8.3 内联函数 vs 直接代码比较;8.5 默认参数;8.5.1 设置函数参数的默认值;// DefaultArgument.cpp #include iostream using namespace std; void main(){ CLOCK t1,t2,t3,t4,t5; setclock(t1); // t1=12:00:00 setclock(t2, 7); // t2=07:00:00 setclock(t3,14,20); // t3=14:20:00 setclock(t4,18,30,0); // t4=18:30:00 setclock(t5,19, , 0) ; // 非法 } ;说明;说明(续);8.5.2 占位符参数;修改后:(见下页);long min( long a, long b, long c ) { …}; void main( ){ long a = 100, b=200; long c = min ( a, b, MAXNUMBER); long d = min(a, b, c); };8.6 函数重载;8.6.1 重载的概念;c= max(a,b); d= max(a,b,c); 编译器根据什么来区分调用哪个函数? 函数名:相同,无法区分; 返回值类型:语句中不出现返回值类型,也无法区分; 参数:参数的个数和类型不同,可以区分。;8.6.2.1 参数类型不同的重载函数;8.6.2.2 参数个数不同的重载函数;int min(int a, int b,

文档评论(0)

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

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

1亿VIP精品文档

相关文档