《C++之高级函数特性.ppt》由会员分享,可在线阅读,更多相关《C++之高级函数特性.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Version 3.0高级函数特性高级函数特性第二章第二章回顾回顾传统编程的缺点传统编程的缺点对象对象类类抽象抽象继承继承封装封装多态性多态性2 2目标目标引用引用默认参数默认参数内联函数内联函数函数重载函数重载3 3按值传递按值传递函数调用中复制参数的值函数调用中复制参数的值 函数只能访问自己创建的副本函数只能访问自己创建的副本对副本进行的更改不会影响原始变量对副本进行的更改不会影响原始变量25100#254 4按引用传递按引用传递函数调用中传递参数的引用函数调用中传递参数的引用主要优点主要优点函数可以访问主调程序中的实际变量提供一种将多个值从被调函数返回到主调程序的机制25100#1005
2、 5向函数传递引用向函数传递引用 2-1引用提供对象的别名或可选名引用提供对象的别名或可选名“&”告诉编译器将变量当作引用告诉编译器将变量当作引用 voidswap(int&i,int&j)inttmp=i;i=j;j=tmp;voidmain()intx,y;swap(x,y);6 6向函数传递引用向函数传递引用 2-2引用就是对象本身引用就是对象本身不要认为不要认为引用是指向对象的指针引用是该对象的副本大的数据结构按引用传递,效率非常高大的数据结构按引用传递,效率非常高7 7返回引用返回引用返回引用不是返回变量的副本返回引用不是返回变量的副本函数头中包含一个函数头中包含一个“&”int&f
3、n(int&num)return(num);voidmain()intn1,n2;n1=fn(n2);8 8常量引用常量引用用于不希望修改对象,以及要把大对象当用于不希望修改对象,以及要把大对象当作输入参数的情况作输入参数的情况高效性和安全性高效性和安全性doubledistance(constpoint&p1,constpoint&p2);将引用声明为常量,不能再绑定别的对象将引用声明为常量,不能再绑定别的对象intconst&ri=num1;9 9函数函数函数声明函数声明函数名函数返回值的类型函数的参数个数和类型函数声明可以不包含参数名函数声明可以不包含参数名调用函数时可以不指定全部参数调
4、用函数时可以不指定全部参数1010函数的默认参数函数的默认参数为可以不指定的参数提供默认值为可以不指定的参数提供默认值voidfunc(int=1,int=3,char=*);或或voidfunc(intnum1,intnum2=3,charch=*);1111参数的默认值参数的默认值 2-1一旦给一个参数赋了默认值,后续所有参数也都一旦给一个参数赋了默认值,后续所有参数也都必须有默认值必须有默认值voiderrfunc(intnum1=2,intnum2,charch=+);/错误错误默认值的类型必须正确默认值的类型必须正确默认值可以在原型或者函数定义中给出,但不能默认值可以在原型或者函数定
5、义中给出,但不能在两个位置同时给出在两个位置同时给出建议在原型声明中指定默认值建议在原型声明中指定默认值1212参数的默认值参数的默认值 2-2调用上面声明的函数调用上面声明的函数 func()func(2,13,+);func(1);/第二个和第三个参数采用默认值第二个和第三个参数采用默认值func(2,25);/第三个参数采用默认值第三个参数采用默认值func();/所有这三个参数都采用默认值所有这三个参数都采用默认值func(2,+);/错误!错误!如果遗漏了中间的参数,编译器将报错如果遗漏了中间的参数,编译器将报错1313默认参数的优点默认参数的优点如果要使用的参数在函数中几乎总是采用
6、如果要使用的参数在函数中几乎总是采用相同的值,则默认参数非常方便相同的值,则默认参数非常方便通过添加参数来增加函数的功能时,默认通过添加参数来增加函数的功能时,默认参数也非常有用参数也非常有用1414内联函数内联函数 2-1通常的函数调用会节省内存空间,但是会通常的函数调用会节省内存空间,但是会花费一些额外的时间花费一些额外的时间内联函数节省短函数的执行时间内联函数节省短函数的执行时间 inlinefloatconverter(floatdollars);1515内联函数内联函数 2-2非常短的函数适合于内联非常短的函数适合于内联函数体会插入到发生函数调用的地方函数体会插入到发生函数调用的地方
7、fn1()fn1()fn1()fn1()fn1();语句;fn1();mfunc();fn1();funcy();main()main()重复地放到函数中的代码放在内联函数中的代码1616注意事项注意事项编译器必须先看到函数定义,而不是声明编译器必须先看到函数定义,而不是声明编译器有可能会忽略编译器有可能会忽略inline关键字关键字不允许为不同的源文件中的内联函数指定不允许为不同的源文件中的内联函数指定不同的实现不同的实现1717函数重载函数重载 2-1具有相同的名称,执行基本相同的操作,具有相同的名称,执行基本相同的操作,但是使用不同的参数列表但是使用不同的参数列表函数多态性函数多态性vo
8、iddisplay();voiddisplay(constchar*);voiddisplay(intone,inttwo);voiddisplay(floatnumber);1818函数重载函数重载 2-2编译器通过调用时参数的个数和类型确定编译器通过调用时参数的个数和类型确定调用重载函数的哪个定义调用重载函数的哪个定义只有对不同的数据集完成基本相同任务的只有对不同的数据集完成基本相同任务的函数才应重载函数才应重载1919函数重载的优点函数重载的优点不必使用不同的函数名不必使用不同的函数名有助于理解和调试代码有助于理解和调试代码易于维护代码易于维护代码2020数据类型不同的重载数据类型不同的
9、重载参数的类型不同,编译器就能够区分参数的类型不同,编译器就能够区分 intsquare(int);floatsquare(float);doublesquare(double);同一函数名输出任何数据就是重载了输出同一函数名输出任何数据就是重载了输出函数函数2121参数个数不同的重载参数个数不同的重载intsquare(int);/函数声明函数声明intsquare(int,int,int);intasq=square(a)/函数调用函数调用intbsq=square(x,y,z)编译器会调用参数匹配的函数编译器会调用参数匹配的函数与函数的声明顺序无关与函数的声明顺序无关不会考虑返回类型不会考虑返回类型2222函数重载的作用域规则函数重载的作用域规则重载机制只有在函数声明的作用域内才有效重载机制只有在函数声明的作用域内才有效classfirstpublic:voiddisplay();classsecondpublic:voiddisplay();voidmain()firstobject1;secondobject2;/没有发生函数重载没有发生函数重载object1.display()object2.display();2323总结总结引用引用默认参数默认参数内联函数内联函数函数重载函数重载2424
限制150内