您好,欢迎访问三七文档
Version3.0高级函数特性第二章2回顾传统编程的缺点对象类抽象继承封装多态性3目标引用默认参数内联函数函数重载4按值传递函数调用中复制参数的值函数只能访问自己创建的副本对副本进行的更改不会影响原始变量25100#255按引用传递函数调用中传递参数的引用主要优点函数可以访问主调程序中的实际变量提供一种将多个值从被调函数返回到主调程序的机制25100#1006向函数传递引用2-1引用提供对象的别名或可选名“&”告诉编译器将变量当作引用voidswap(int&i,int&j){inttmp=i;i=j;j=tmp;}voidmain(){intx,y;swap(x,y);}7向函数传递引用2-2引用就是对象本身不要认为引用是指向对象的指针引用是该对象的副本大的数据结构按引用传递,效率非常高8返回引用返回引用不是返回变量的副本函数头中包含一个“&”int&fn(int&num){return(num);}voidmain(){intn1,n2;n1=fn(n2);}9常量引用用于不希望修改对象,以及要把大对象当作输入参数的情况高效性和安全性doubledistance(constpoint&p1,constpoint&p2);将引用声明为常量,不能再绑定别的对象intconst&ri=num1;10函数函数声明函数名函数返回值的类型函数的参数个数和类型函数声明可以不包含参数名调用函数时可以不指定全部参数11函数的默认参数为可以不指定的参数提供默认值voidfunc(int=1,int=3,char='*');或voidfunc(intnum1,intnum2=3,charch='*');12参数的默认值2-1一旦给一个参数赋了默认值,后续所有参数也都必须有默认值voiderrfunc(intnum1=2,intnum2,charch='+');//错误默认值的类型必须正确默认值可以在原型或者函数定义中给出,但不能在两个位置同时给出建议在原型声明中指定默认值13参数的默认值2-2调用上面声明的函数func()func(2,13,'+');func(1);//第二个和第三个参数采用默认值func(2,25);//第三个参数采用默认值func();//所有这三个参数都采用默认值func(2,,‘+’);//错误!如果遗漏了中间的参数,编译器将报错14默认参数的优点如果要使用的参数在函数中几乎总是采用相同的值,则默认参数非常方便通过添加参数来增加函数的功能时,默认参数也非常有用15内联函数2-1通常的函数调用会节省内存空间,但是会花费一些额外的时间内联函数节省短函数的执行时间inlinefloatconverter(floatdollars);16内联函数2-2非常短的函数适合于内联函数体会插入到发生函数调用的地方fn1()fn1()fn1()fn1()fn1();语句;fn1();mfunc();fn1();funcy();main()main()重复地放到函数中的代码放在内联函数中的代码17注意事项编译器必须先看到函数定义,而不是声明编译器有可能会忽略inline关键字不允许为不同的源文件中的内联函数指定不同的实现18函数重载2-1具有相同的名称,执行基本相同的操作,但是使用不同的参数列表函数多态性voiddisplay();voiddisplay(constchar*);voiddisplay(intone,inttwo);voiddisplay(floatnumber);19函数重载2-2编译器通过调用时参数的个数和类型确定调用重载函数的哪个定义只有对不同的数据集完成基本相同任务的函数才应重载20函数重载的优点不必使用不同的函数名有助于理解和调试代码易于维护代码21数据类型不同的重载参数的类型不同,编译器就能够区分intsquare(int);floatsquare(float);doublesquare(double);同一函数名输出任何数据就是重载了输出函数22参数个数不同的重载intsquare(int);//函数声明intsquare(int,int,int);intasq=square(a)//函数调用intbsq=square(x,y,z)编译器会调用参数匹配的函数与函数的声明顺序无关不会考虑返回类型23函数重载的作用域规则重载机制只有在函数声明的作用域内才有效classfirst{public:voiddisplay();};classsecond{public:voiddisplay();};voidmain(){firstobject1;secondobject2;//没有发生函数重载object1.display()object2.display();}24总结引用默认参数内联函数函数重载
本文标题:北大青鸟C++ 2
链接地址:https://www.777doc.com/doc-3350703 .html