面向对象程序设计3汇总_第1页
面向对象程序设计3汇总_第2页
面向对象程序设计3汇总_第3页
面向对象程序设计3汇总_第4页
面向对象程序设计3汇总_第5页
免费预览已结束,剩余29页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计华中师范大学物理系函数的声明和调用函数间的参数传递内联函数带缺省形参值的函数函数重载函数模板 C+十系统函数2函数的声明函数是面向对象程序设计中的基本抽象 单元,是对功能的抽象函数定义的语法形式类型标识符 函数名(形式参数表)r t.t t语句序列若无参数,写void 是被初始化的内部 变量,寿命和可见 性仅限于函娄若无返回值,写void4函数的声明与使用函数的声明形式参数表vtypei name vtype?name2,, vtypename门函数的返回值-由return语句给出,例如: return 0无返回值的函数(void类型),不必写 return 语句。 函数的调用

2、 调用前先说明函数原型:-在调用函数的说明部分,或程序文件开头 所有函数之前,按如下形式说明:I类型标识符 被调用函数名(含类型说明的形参表);r 调用形式函数名(实参列表)I嵌套调用-函数不允许嵌套声明,但可以嵌套调用。递归调用 *-函数直接或间接调用自身。女 r【亦例31编习一个求X的n次方的 函 数#include double power (double x, inh n); void main (void)cout 5 to the power 2 s ” power (5,2) endl;double power (double x, int n)double val = 1.0;

3、 while (n)val = val*x; return (val);6例编期一个求X的n次方的函数函数的声明与使用运行结果:5 to the power 2 is 25函数的声明与使用例32数制转换题目:输入一个8位二进制数,将其转换 为十进制数输出。例如:000011012=0(27) +0(26) +0(25) +0(24) +1(23)+ 1(22)+ 0(21) + 1(20)= 130所以,若输入00001101,则应输出8#include double power (doiible x, nt n);int int charcout forvoid main (void)1;v

4、alue = 0; ch ; Enter an 8 bit binary number ; = 7; = 0; -)cn ch; if (ch =)value += nt(power(2,);cout Decimal value is valueendl;double powe上 (double x, int n)doubleval = 1.0;whileval(n-) *= X ; return(val);运行结果:Enter an 8 bit binary number 01101001Decimal value s 105函数的声明与使用例33编眉程序求IT的值其中arcta n用如下形

5、式的级数计算:直到级数某项绝对值不大于105为止; TT和X均为double型。II#include void main()double a,b;double arctan(double x); a=16.0*arctan(1 /5-0); b=4.0*arctan(1/2390);注意:因为整数相除结果取整, 如果参数写1/5, 1/239,结果就都是0 cout Pl=vvabvve ndl;double arctan(double x) int i;double r,e,f,sqr; sqr=x*x;r=0; e=x; i=1; while(e/i1e-15)f=e/i; r=(i%4=

6、1)? r+f : r-f ; e=e*sqr; i+=2;return r;运行结果:P 1=3.14159运行结果:P 1=3.14159函数的声明与使用例34寻找并输出11-999之间的数m,它满 定m、m2和m3均为回文薮。-回文:各位数字左右对称的整数。 例如:门满足上述条件112=121, 113=1331O分析:若相等 *15-10取余的方法,从最低位开始,依次取 出该数的各位数字。按反序重新构成新 的数,比较与原数是否相等, 则原数为回文。#include void main()bool symm(long n);long m;for(m=11; m1000; m+)if(sy

7、mm(m)&symm(m*m )&symm(m*m*m) coutm=m m*m=m*m m*m*m=m*m*mendl;bool symm(long n)long i, m; i=n ; m=0 ; while(i)m=m*10+i%10; i=i/10 ;return ( m=n );运行结果:m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=136763121函数的声明与使用函数调用的执行过程miam()kun()保存: 返回地址 当前现场funO恢复:主调程序现场 返回地址返回19函数的声

8、明与使用偎套调用main, 调 funl()结束2fun 1() 调 fun2() 返回6fun2()返回函数的声明与使用例36输入两个at数,include void main(void)int a, b;int funl (int x, int y) cinab;couta 、b的平 funl (a.方和:b) 0!=l未知 己知冋归:4!=4X3!=243!=3X2!=62!=2X 1!=2一1!=1 XO!=1 一 0!=l未知已里2325函数的声明与使用例38求n!分析:计算n!的公式如下:这是一个递归形式的公式, 归函数实现。应该用递源程序: ftinclude long fac(

9、int n)long f;if (n0)coutn0, data error! endl; else if (n=0) f=l;else f=fac(n-l)*n:return(f);void main ()long fac(int n);int n;long y :coutEnter a positive integer:; cinn;y=fac(n);!=yendl:运行结果:Enter a positive integer:8 81=40320函数的參数传递机制传递參数值在函数被调用时才分配形参的存储 单元。实参可以是常量、变量或表达式。实参类型必须与形参相符。传递时是传递参数值,即单向

10、传递。27 28函数的參数传递机制参数值传递举例主调函数: D = po wer(A,3)XN被调函数:double power(double X, int 冷例311 输入两 Jt数交换后输出#includeioshream void Swap(inh a, inh int m&xn()int X(5), y(10); cou tv V x= x Swap (x,y);cou h ” x= x return 0;y = yendl;y = yendl; *29void Swap (inha.inhb)inh t; h=a; a=b; b=t;y=10 y=10运行结果:x=5x=5函数的声明

11、与使用函数的參数传递用弓I用做疟参引用(&)是标识符的别名,例如:int i,j;int &ri=i;建立一个iiit型的引用Ti,并将其/初始化为变量i的一个别名j=10;ri=j ; /相当于 T=j ;声明一个引用时,必须同时对它进行初始化, 使它指向一个已存在的对象。一旦一个引用被初始化后,就不能改为指向 其它对象。 引用可以作为形参亠 k31void swap(int& a, int& b) 尢33函数的声明与使用例输入两个Jt数交换后输出#include void Swap(int& a, inh main ()int& b);int X(5), y(10); COUt x= ”

12、x Swap (x,y); corih x= ” x return 0;y= yencil ;y= yencil ; *void Swap (inh&a f inh& b)y=10y=5运行结果:x=5 x=10Swap(X,y);aa=ba例313弓I用调用举例#include #include void fiddle(int inl, int &in2); int main() int count = 7# index = 12; cout ThQ values are coutsetw (5) count; coutsetw (5) indGXendl; fiddle(count, in

13、dex); cout The values are ; coutsetw (5) count; coutsetw (5) indexen return 0;孜35void fiddle (int ini, inh &ln2)运行结果:nl = nl + 100;n2 = n2 + 100; cout * The values are ; coutsehw (5) inl;coutsehw (5) in2endl;Thevaluesare712Thevaluesaxe107112Thevaluesare7112声明时使用关键字inlineo编译时在调用处用函数体进行替换,节 省了参数传递、控制转

14、移等开销。注意:-内联函数体内不能有循环语句和switch 语句。-内联函数的声明必须出现在内联函数第 一次被调用之前。,.-对内联函数不能进行异常接口声明。* 冷37例314内联函数应用举例#ncludeostream nlne double CalArea(double radxus)return 3.14*radius*radius;nt znaxn ()double r(3.0); double area; area=CalArea(r); coutareaendl; return 0;38缺省形參值的作用函数在声明时可以预先给出默认的形参值, 调用时如给出实参,则釆用实参值,否则采

15、用预先给出的默认形参值。例如:int add(int x=5,int y=6) void main(void) return x+y; acld( 10,20); 7/104-20add(lO); /10+6add(); /5+6 39带缺省形参值的函数峡省形参值的说明次序缺省形参值必须从右向左顺序声明,并 且在缺省形参值的右面不能有非缺省形 参值的参数。因为调用时实参取代形参 是从左向右的顺序。例:int acld(int x,int y=5Jnt z=6); 正确 int add(int x=1 Jnt y=5,int z); 错误int add(int x=1 ,int y,int z=

16、6); /错误 *40调用出现在函数体实现之前时,缺省形参值必 须在函数原形中给出;而当调用出现在函数体 实现之后时,缺省形参值需在函数实现时给出。int add(inl x=53nt y=6); void main(void) addO; /调用在实现前int add(int x,int y) return x+y; 例;int add(int x=5,int y=6) return x+y; void main(void) add(); 调用在实a后, * *41 i相同的作用域内,缺省形参值的桃明应 保持唯一,但如果在不同的作用域内,允 许说明不同的缺省形参。例:int add(int

17、x=1,int y=2);void main(void) int add(int x=3,int y=4);add(); 使用局部缺省形参值(实现3+4)void fun (void)add(); /使用全局缺省形参值(实现1+2 *42缺省形参值的函数ffinclude #include int get_volume(int length, int width int main )int X = 10, y = 12, s = 15; Some box data is get_volume (x, y, Some box data is get_volume (x, y) Some box

18、data is get volume(x) Some box data is get volume(x, 7) Soine box data is get volume (5,=2, int height = 3);cout couh couh cout cout cout cout cout cout cout5zn f z) endl;H endl;n zendl;II endl;n 5) ereturn 0;43int get volume (int width,int height)coutsetw (5) lengthsetw (5) widthsetw (5)

19、 heightreturn length* width* height;运行结果:Some box data is Some box data is Some box data is Some box data is Some box data is121227515 18003 3603 603 2105 125从而形成重载。 c+十允许功能相近的函数在相同的作用 域内以相同函数名声明, 方便使用,便于记忆。例:-形参类型不同丿int add(int x, int y);float add(float x, float y);int add(int x, int y); int add(in

20、t x, int y, int z);j形参个数不娶*45-重载函数的形参必须不同:个数不同或类型不同。 -编译程序将根据实参和形参的类型及个数的最佳 匹配來选择调用哪一个函数。int add(int x,int y);/ int add(int x,inl y);int add(int a,int b);void add(int x,int y);编译器不以形参名来区分编译器不以返回值来区分-不要将不同功能的函数声明为重载函数,以免出 现调用结果的误解、混淆。这样不好:int add(int x,int y): float add(float x,float y) return x: y; : return x- y; 一 46例316T载函数应用举例编写三个名为add的重载函数,分别实现两整数 相加.两实数相加和两个复数相加的功能。#includestruct complexdouble real; double imaginary;47void main(void)int m, n; double X, y;complex c1, c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论