




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章函数 函数一个C+程序有一个主函数, 主函数是程序执行的开始点。C+ 不允许函数定义嵌套。函数有两种:标准库函数和用户自定义函数内联函数 内联函数内联函数也称内嵌或内置函数,它的语法格式与普通函数一样,只是在函数原型或函数定义标题头之前加上关键字inline。inline int isnumber(char);inline int isnumber(char ch) return(ch=0 &ch=9)?1:0;编译器为内联函数创建一段源代码,每遇到一次该函数的调用都用相应的一段代码来代替。内联函数应是使用频率高,代码却很短的函数内联函数#include using namespace
2、std;inline int isnumber(char); / int isnumber(char);(则正常函数调用)int main() char c; while (cinc & c!=n) if (isnumber( c ) coutyou entered a digitn; else cout=0 &ch=9)?1:0; 内联函数的限制内联函数中,不能含有开关例如switch和循环语句,例如while。 递归函数是不能被用来做内联函数的。内联函数中不能说明数组内联函数是建议性,不是指令性内联函数只适合于1-5行的小函数类结构中所有在类内部定义的函数,都是内联函数。虚函数不能是内联函
3、数重载函数 重载函数 C:void print_int(int);void print_char(char);void print_double(double); C+支持重载函数:出现在同一个作用域的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。void print (int); void print (char); void print (double); C+编译器根据传递的实参类型来判断调用哪个函数。 print (-10);/调用print (int); print (a);/调用print (char); print (12.3);/调用print (double);
4、重载函数 void print (double); void print (long); void print(double,char*); void print(char*,double); void fun( ) print (1L);/print(long) print (1.0);/print(double) print (2.0,”hello”);/print(double,char*) print (”hello”,3.0);/print(char*,double)重载函数匹配结果1.编译器找到与实参最佳匹配的函数2.找不到形参与函数调用的实参匹配的函数,编译器给出编译错误3.存在
5、多个与实参匹配的函数,但没有一个是明显的最佳选择。该调用具有“二义性”,也是错误的匹配重载函数void print(int);void print(double);void function() print(3); print(5.0); print(a); print(3.1415f);void print(long);void print(double);void function() int a; print(a);/有二义性print(long(a);或者print(double(a);(1)严格匹配(2)内部转换(相容类型匹配)(3)通过用户定义的转换寻找求一个匹配重载的内部实现C+
6、用名字粉碎(name mangling)(名字细分、名字压轧)的方法来改变函数名。用v,c,i,f,l,d,r 分别表示void,char,int,float,long,double,longdouble. int f (char a); / f_c int f (char a,int b,double c); /f_cid注意点返回值类型不能够作为重载依据(区分、细分重载)void func (int);int func ( int);fucn(10); /error课堂练习int show(int);float show(float);float show(float);int show(
7、int a)coutint:aendl;return a;float show(float b)cout float:bendl;return b;double show(double c)cout double:cendl;return c;int _tmain(int argc, _TCHAR* argv)show(12);show(0.12);show(0.00000032);return 0;默认参数的函数 默认参数的函数void delay(int loops);void delay(int loops) if (loops=0)return; for (int i=0;iloops
8、;i+);将loops 定义成默认值为1000调用时:delay();delay(2000);默认参数也称为缺省参量,也就是在函数声明的时候已给定一个值,如果调用函数时没有指定这个参数的值,编译器就会自动地插上这个值。默认参数函数的声明当又有声明又有定义时,定义中不允许默认参数。若只有定义,则默认参数才可出现在函数定义中默认参数的顺序规定定义时:不可以在一个默认参数后面又跟一个非默认参数;调用时:一旦在一个函数调用中开始使用默认参数,那么这个参数后面的所有参数都必须是默认的例:void foo(int a, int b=50, int c=0);void foo(int a, int b, b
9、ool c = false);void foo(int a, int b = 0, bool c);默认参数函数的例子#include using namespace std; void fun(int a,int b=3,int c=5) couta=a, b=b,c=c,endl; int main() fun(7); fun(7,9); fun(7,9,11); fun(); coutOK; return 0; 默认值的规定默认值可以是全局变量、全局常量、函数。不可以是局部变量。因为默认值是在编译时确定的,必须是静态确定的。函数重载与函数默认例1: void func(int,int);
10、void func(int=3,int=4);func(22,32);例2:void func(int); void func(int,int);例3:void func(int);void func(int,int=4);应该避免重载过程中的涉及参数个数的默认设置函数重载与函数默认int month,int day,int year;void Tdate() month=4; day=15; year=1995;void Tdate(int m) month=m; day=15; year=1995;void Tdate(int m,int d) month=m; day=d; year=1995;void Tdate(int m,int d,int y) month=m; day=d; year=y;int main() Tdate(); Tdate(1); Tdate(1,2); Tdate(1,2,3); return 0;默认函数:void Tdate(int m=4,int d=15
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软考设计师趋势与试题及答案预测
- 网络故障应急响应试题及答案
- 2025年技术驱动下的战略分析与风险对策试题及答案
- 2025年网络管理员考试趋势试题及答案
- 风险预判与决策支持试题及答案
- 法学概论综述与案例教学的结合试题及答案
- 云计算平台的优势与挑战试题及答案
- 2025年市场变化对战略的影响试题及答案
- 2025年软考软件设计师创新试题及答案
- VB编程技巧与试题及答案结合
- 3.2金属材料 课件高一上学期化学人教版(2019)必修第一册
- 餐饮加盟合同合同范本
- 陌生拜访情景演练
- 绝经后子宫内膜增厚诊疗2024课件
- 八年级数学家长会课件
- 慢性过敏性结膜炎科普讲座课件
- 幼儿园营养膳食蔬菜水果认知主题课件
- 河北省五个一名校2025届高考物理押题试卷含解析
- 人力资源许可证制度(服务流程、服务协议、收费标准、信息发布审查和投诉处理)
- 2024年秋新冀教版三年级上册英语教学课件 U6L1
- 开具保函委托协议书范本
评论
0/150
提交评论