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