资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.4 面向过程编程风格n n1.4.1 函数n n1.4.2 局部静态变量n n1.4.3 inline函数n n1.4.4 重载n n1.4.5 模板函数n n1.4.6 函数指针n n1.4.7 头文件包含1.4.1 函数使用函数的优点:使用函数的优点:使用函数的优点:使用函数的优点:n n1 1)易读性,一般不超过)易读性,一般不超过)易读性,一般不超过)易读性,一般不超过500500行;行;行;行;n n2 2)复用性,避免重复代码;)复用性,避免重复代码;)复用性,避免重复代码;)复用性,避免重复代码;n n3 3)团队协作)团队协作)团队协作)团队协作函数的函数的函数的函数的4 4个部分:个部分:个部分:个部分:n n1 1)返回类型,)返回类型,)返回类型,)返回类型,voidvoid无无无无n n2 2)函数名称,)函数名称,)函数名称,)函数名称,GetNameGetName()()的易读英文的易读英文的易读英文的易读英文n n3 3)参数表,可)参数表,可)参数表,可)参数表,可voidvoidn n4 4)函数主体)函数主体)函数主体)函数主体函数的注意n n1 1)使用之前需申明(可不写参数名),申明与实)使用之前需申明(可不写参数名),申明与实)使用之前需申明(可不写参数名),申明与实)使用之前需申明(可不写参数名),申明与实现最好分别放在现最好分别放在现最好分别放在现最好分别放在.h.h和和和和. .cppcpp中,中,中,中,模板例外模板例外模板例外模板例外n n2 2)参数的合法性是否检查:由项目分工决定(关)参数的合法性是否检查:由项目分工决定(关)参数的合法性是否检查:由项目分工决定(关)参数的合法性是否检查:由项目分工决定(关于数据类型的溢出)于数据类型的溢出)于数据类型的溢出)于数据类型的溢出)n n3 3)常常使用)常常使用)常常使用)常常使用boolbool型作为函数是否正常返回的返型作为函数是否正常返回的返型作为函数是否正常返回的返型作为函数是否正常返回的返回类型,不使用回类型,不使用回类型,不使用回类型,不使用exit(-1)exit(-1)这种武断的形式这种武断的形式这种武断的形式这种武断的形式n n)除)除)除)除voidvoid返回类型,其余必须明确各支线的返返回类型,其余必须明确各支线的返返回类型,其余必须明确各支线的返返回类型,其余必须明确各支线的返回值,否则编译出错回值,否则编译出错回值,否则编译出错回值,否则编译出错/ /或警告或警告或警告或警告函数的调用n n传值:参数被复制,函数调用完后,全部传值:参数被复制,函数调用完后,全部释放释放n n传址:复制的是原实参对象的地址,函数传址:复制的是原实参对象的地址,函数调用结束,实参被改变调用结束,实参被改变n n使用传址的优点:使用传址的优点:n n)可以方便对传入的对象进行修改;)可以方便对传入的对象进行修改;n n)可以得到多个返回值;)可以得到多个返回值;n n)不用复制对象,效率得到提高)不用复制对象,效率得到提高指针和引用区别n n)都具有上述特点;)都具有上述特点;)都具有上述特点;)都具有上述特点; swap(intswap(int * x1, * x1, intint* x2); * x2); swap(intswap(int &x1, &x1, intint &x2); &x2);n n)调用方法有区别;)调用方法有区别;)调用方法有区别;)调用方法有区别;n n)指针需要对其合法性进行检查,否则容易出)指针需要对其合法性进行检查,否则容易出)指针需要对其合法性进行检查,否则容易出)指针需要对其合法性进行检查,否则容易出现异常;现异常;现异常;现异常;n n)建议在使用基本数据类型时,使用指针,类)建议在使用基本数据类型时,使用指针,类)建议在使用基本数据类型时,使用指针,类)建议在使用基本数据类型时,使用指针,类的对象时尽量使用引用的对象时尽量使用引用的对象时尽量使用引用的对象时尽量使用引用n n5 5)虚函数调用区别)虚函数调用区别)虚函数调用区别)虚函数调用区别? print (BOOK * pBook) pBook-print(); print (BOOK * pBook) pBook-print(); print(BOOK &book) book.print(); print(BOOK &book) book.print();对象的生存空间n n函数Local scope: 局部可见和有效。使用栈空间,不能使用局部指针或引用得到函数返回值(除static),例如返回实数数组n nFile scope:文件可见、有效n n外部:extern (”C”)类型函数或对象; 动态内存n n使用堆空间使用堆空间n n关键字,关键字,n n例子:例子:intint * * piapia = new int4; /array = new int4; /array intint * pi = new int(4); /initialize *pi=4 * pi = new int(4); /initialize *pi=4 delete delete piapia; ; delete pi; delete pi;n n注意注意memory leakmemory leak内存泄露!内存泄露!默认参数值n n规则:规则:n n)按照最右端开始匹配;)按照最右端开始匹配;n n)函数申明处,或者函数定义处,两者)函数申明处,或者函数定义处,两者只可有一;只可有一;n n)为了可见性,)为了可见性,建议放在函数申明处,建议放在函数申明处,这样在函数调用时,开发环境直接提示这样在函数调用时,开发环境直接提示1.4.2 局部静态变量n n函数弹出栈,函数弹出栈,staticstatic变量并不释放变量并不释放还有一种方式还有一种方式也行,效率差也行,效率差求N!的递归算法unsigned unsigned intint fact (unsigned fact (unsigned intint n) n) static vector static vector Fact; /Fact = new Fact; /Fact = new intint; static unsigned static unsigned intint num = 0; num = 0; if (n = num) return Factn-1; if (n = num) return Factn-1; else else unsigned unsigned intint res; res; if(nif(n = 1 | n = 0) res = 1; = 1 | n = 0) res = 1; else res = n*fact(n-1); else res = n*fact(n-1); num = n; num = n; Fact.pushback(resFact.pushback(res); ); return res; return res; /说明求说明求3!, 5!, 4!3!, 5!, 4!的过程的过程1.4.3 inline函数n n编译器对其合并,而不是执行时压栈编译器对其合并,而不是执行时压栈n n对于对于常用的常用的代码代码简单的简单的程序块,建议程序块,建议使用使用inlineinline,可以提高效率,可以提高效率1.4.4 重载n n函数名相同,参数表不函数名相同,参数表不同(参数类型或参数数同(参数类型或参数数目)目)n n函数返回值类型可同可函数返回值类型可同可不同,不能以返回值类不同,不能以返回值类型不同来定义重载型不同来定义重载1.4.5 模板函数n n对于参数表数目相同,对于参数表数目相同,只是类型不同,而且只是类型不同,而且函数体相似函数体相似函数体相似函数体相似(可以通(可以通过重载对象操作符或过重载对象操作符或成员函数),可将这成员函数),可将这样的函数合并成函数样的函数合并成函数模版模版1.4.6 函数指针n n用在程序中动态执行用在程序中动态执行某个函数某个函数n n定义函数指针定义函数指针n n某函数中使用某函数中使用n n使用前确定具体调用使用前确定具体调用方法方法函数定义1.4.7 头文件包含函数的申明,放入头文件中。注意:函数的申明,放入头文件中。注意:n n) inline修饰,也放入头;修饰,也放入头;n n)函数实现只能有一份;)函数实现只能有一份;n n)多个文件包含的头文件,若公用全局)多个文件包含的头文件,若公用全局对象,加对象,加n n)“”与的区别,编译器搜索顺序:与的区别,编译器搜索顺序:若引号则从当前的目录开始,若引号则从当前的目录开始,则从库目则从库目录及另外环境设置的目录进行搜索。另一录及另外环境设置的目录进行搜索。另一种观点是自定义与系统头文件之区别。种观点是自定义与系统头文件之区别。第一次 作业n n1 1、练习、练习1-71-7,pp33pp33n n2 2、练习、练习2-62-6,pp65pp65
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号