面向对象程序设计 第五章 函数2.ppt
《面向对象程序设计 第五章 函数2.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计 第五章 函数2.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 函数函数 函数概述函数概述 函数的说明与使用函数的说明与使用5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递1.传值调用方式传值调用方式例例int mul(int m)m=m*3;return m;调用函数调用函数2次次:int m=5;/变量与形参同名变量与形参同名cout mul(2)mul(m)mendl;执行结果执行结果:6 15 5传值调用是指传值调用是指在发生函数调在发生函数调用时,先计算用时,先计算实参表达式的实参表达式的值,并直接将值,并直接将各实参的值依各实参的值依次赋值给各形次赋值给各形参。参。单向传递,单向传递,即由实参到形即
2、由实参到形参;参;形参的值不形参的值不能影响实参的能影响实参的值。值。#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);ab24输出c=85.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递2.引用调用方式引用调用方式 引用引用:引用是给已知的一个变量起的一个引用是给已知的一个变量起的一个别别名名。当建立引用时。当建立引用时,程序程序必须必须用另一个用另一个变量或对象的名字初始化它。对
3、引用变量或对象的名字初始化它。对引用的改动,实际上是对目标的改动。的改动,实际上是对目标的改动。引用定义的格式引用定义的格式&();或者或者&=;5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递2.引用调用方式引用调用方式说明说明:引用在定义时一定要初始化引用在定义时一定要初始化例例 int a=3;int&m=a;m=m+5;int n=m;对引用的操作就是对被引用对引用的操作就是对被引用 的变量的操作的变量的操作 可以把某个引用赋给一个变可以把某个引用赋给一个变 量,该变量的值就是被引用量,该变量的值就是被引用 的变量值的变量值 引用一旦初始化后不得作为引用
4、一旦初始化后不得作为 其他变量的别名其他变量的别名5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递在一条在一条语句中声明多个引用语句中声明多个引用:int&x=a,y=b,z=c;注注int&x=a,&y=b,&z=c;int&x,y,z;声明引用变量而不对其进行初始化是个语法错误声明引用变量而不对其进行初始化是个语法错误.int x=3,&y;/Reference variable y must be initialized#include void main()int x=3,&y=x;cout“x=”xn“y=”yendl;y=7;cout“x=”xn“y
5、=”yendl;5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递2.引用调用方式引用调用方式例例x=3y=3x=7y=7输出结果输出结果:5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递2.引用调用方式引用调用方式 函数的引用调用:函数的引用调用:调用函数的实参必须要用变量名,将实调用函数的实参必须要用变量名,将实参变量名赋给形参的引用,相当于在被调用参变量名赋给形参的引用,相当于在被调用函数中使用了实参的别名。如函数中使用了实参的别名。如swap(a,b);在函数原型中该参数类型后面加上在函数原型中该参数类型后面加上&,如:,如
6、:void swap(int&x,int&y);5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递2.引用调用方式引用调用方式 函数的引用调用:函数的引用调用:相比按值调用,相比按值调用,按引用调用对性能有按引用调用对性能有利,因为它消除了复制大量数据的开销。但利,因为它消除了复制大量数据的开销。但按引用调用的安全性较差,因为被调用函数按引用调用的安全性较差,因为被调用函数能够直接访问和修改调用者的数据。能够直接访问和修改调用者的数据。#include void swap(int x,int y)int temp=x;x=y;y=temp;coutx“”yendl
7、;void main()int a=3,b=5;swap(a,b);couta“”bendl;#include void swap(int&x,int&y)int temp=x;x=y;y=temp;coutx“”yendl;void main()int a=3,b=5;swap(a,b);couta“”bendl;在传值调用中,swap()函数中形参值的改变对实参无影响 在引用调用中,有&x=a,&y=b,因此x和a,y和b同时改变,从而达到实参交换的目的输出结果:输出结果:5 35 3 3 5 3 5输出结果:输出结果:5 35 3 5 3 5 3#include int squareBy
8、Value(int);void squareByReference(int&);int main()int x=2,z=4;cout“x=”x“before squareByValuen”“Value returned by squareByValue:”squareByValue(x)n “x=”x“after squareByValuen”endl;cout“z=”z“before squareByReference”endl;squareByReference(z);cout“z=”z“after squareByReference”endl;return 0;int squareByV
9、alue(int a)return a*a;void squareByReference(int&cRef)cRef*=cRef;x=2 before squareByValue Value returned by squareByValue:4x=2 after squareByValue z=4 before squareByReference z=16 after squareByReference 5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递3.传地址调用方式传地址调用方式*指针运算符,表示指针所指向变量的值指针运算符,表示指针所指向变量的值 int
10、 *p&取地址运算符,用于得到一个对象的地址取地址运算符,用于得到一个对象的地址&iint a;int*ptr;ptr=&a;/将变量将变量a的地址赋值给指针的地址赋值给指针ptr#include void swap(int*,int*);void main()int a=3,b=8;cout a=a ,b=b endl;swap(&a,&b);cout after swapping.n;cout a=a ,b=b endl;void swap(int *x,int*y)int temp=*x;*x =*y ;*y=temp;5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、
11、函数参数传递传址调用指将实参的地址传递给形参传址调用指将实参的地址传递给形参采用这种方式调用时,实参必须用地址值,形采用这种方式调用时,实参必须用地址值,形参用指针变量参用指针变量发生函数调用时,将实参地址直接传递给相应发生函数调用时,将实参地址直接传递给相应的各形参指针变量的各形参指针变量在函数中通过形参指针可以对实参进行间接读在函数中通过形参指针可以对实参进行间接读写写5.2 5.2 函数的说明与使用函数的说明与使用五、函数参数传递五、函数参数传递3.传地址调用方式传地址调用方式5.2 5.2 函数的说明与使用函数的说明与使用六、函数的嵌套与递归六、函数的嵌套与递归1.函数嵌套函数嵌套:一
12、个函数的函数体中包含一个或多:一个函数的函数体中包含一个或多 个函数调用语句。个函数调用语句。若函数若函数A要调用函数要调用函数B,则函数则函数B的定义的定义 或函数原型必须出现在或函数原型必须出现在A的定义之前。的定义之前。说明说明若函数若函数A在执行过程中调用在执行过程中调用B,则中途将则中途将 程序控制权转到程序控制权转到B,待,待B执行结束后再返执行结束后再返 回到回到A。函数嵌套调用示例函数嵌套调用示例定义一个求定义一个求 bin(n,k)的函数。的函数。分析:分析:定义函数定义函数 fact(m)=m!bin(n,k)=fact(n)/(fact(k)*fact(n-k)由主函数输
13、入数据由主函数输入数据 a、b,求求 bin(a,b)试一下试一下函数嵌套调用示例函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for (i=1;i=m;i+)sum*=i;return sum;long bin(int n,int k)return (fact(n)/(fact(k)*fact(n-k);void main()int a,b;long f1,f2;cout Please input data a and b:a b;f1=fact(a)/(fact(b)*fact(a-b);cout first:bin(a ,b )=f1
14、endl;f2=bin(a,b);cout second:bin(a ,b )=f2 endl;函数嵌套调用示例函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for (i=1;i=m;sum*=i,i+);return sum;long bin(int n,int k)return (fact(n)/(fact(k)*fact(n-k);void main()int a,b;long f1,f2;cout Please input data a and b:a b;f1=fact(a)/(fact(b)*fact(a-b);cout firs
15、t:bin(a ,b )=f1 endl;f2=bin(a,b);cout second:bin(a ,b )=f2 endl;函数嵌套调用示例函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for (i=1;i=m;sum*=i,i+);return sum;long bin(int n,int k)return (fact(n)/(fact(k)*fact(n-k);void main()int a,b;long f1,f2;cout Please input data a and b:a b;f1=fact(a)/(fact(b)*fac
16、t(a-b);cout first:bin(a ,b )=f1 endl;f2=bin(a,b);cout second:bin(a ,b )=f2 endl;函数嵌套调用示例函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for (i=1;i=m;sum*=i,i+);return sum;long bin(int n,int k)return (fact(n)/(fact(k)*fact(n-k);void main()int a,b;long f1,f2;cout Please input data a and b:a b;f1=fact
17、(a)/(fact(b)*fact(a-b);cout first:bin(a ,b )=f1 endl;f2=bin(a,b);cout second:bin(a ,b )=f2 endl;5.2 5.2 函数的说明与使用函数的说明与使用六、函数的嵌套与递归六、函数的嵌套与递归2.函数递归函数递归:即自调用函数,在函数体内部直接:即自调用函数,在函数体内部直接 或间接地自己调用自己。或间接地自己调用自己。例如:下面的程序求例如:下面的程序求n!long fact(int n)if(n=1)return 1;return fact(n-1)*n;5.2 5.2 函数的说明与使用函数的说明与使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 第五章 函数2 面向 对象 程序设计 第五 函数
限制150内