版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构体结构体结构的声明结构的声明n结构的概念结构的概念u结构是由不同数据类型的数据组成的集合体。结构是由不同数据类型的数据组成的集合体。n声明结构类型声明结构类型 struct 结构名结构名 数据类型数据类型 成员名成员名 1; 数据类型数据类型 成员名成员名 2; : 数据类型数据类型 成员名成员名 n; ;结构体结构体结构的声明结构的声明n举例:举例:struct student /学生信息结构体学生信息结构体 int num; /学号学号 char name20; /姓名姓名 char sex; /性别性别 int age; /年龄年龄 float score; /成绩成绩 char a
2、ddr30; /住址住址结构体结构体结构变量说明结构变量说明n变量说明形式变量说明形式 结构名结构名 结构变量名;结构变量名;n注意:注意:u结构变量说明在结构类型声明之后,二者也可结构变量说明在结构类型声明之后,二者也可同时进行。同时进行。u结构变量占内存大小可用结构变量占内存大小可用 sizeof 运算求出:运算求出: sizeof(运算量运算量)结构体结构体结构变量的初始化结构变量的初始化和使用和使用n初始化初始化说明结构变量的同时可以直接设置初值。说明结构变量的同时可以直接设置初值。n使用使用结构体成员的引用形式:结构体成员的引用形式: 结构变量名结构变量名.成员名成员名例例2-13结
3、构体变量的初始化和使用结构体变量的初始化和使用#include #include struct student /学生信息结构体学生信息结构体 int num; /学号学号 char name20; /姓名姓名 char sex; /性别性别 int age; /年龄年龄stu=97001,Lin Lin,F,19;void main( ) coutsetw(7)stu.numsetw(20) setw(3)stu.sexsetw(3)stu.age;运行结果运行结果: 97001 Lin 97001 Lin LinLin F 19 F 19例例2-14有三只动物,都具有重量和
4、身长两个属性,现在需要对有三只动物,都具有重量和身长两个属性,现在需要对它们的重量和身长赋值,并且输出它们的重量。它们的重量和身长赋值,并且输出它们的重量。#include struct animal int weight; int feet;int main( ) animal dog1, dog2, chicken; dog1.weight = 15; dog2.weight = 37; chicken.weight = 3; dog1.feet = 4; dog2.feet = 4; chicken.feet = 2; cout The weight of dog1 is dog1.we
5、ight n; cout The weight of dog2 is dog2.weight n; cout The weight of chicken is chicken.weight n; return 0;运行结果运行结果 The weight of dog1 is 15 The weight of dog2 is 37 The weight of chicken is 3结构体数组举例结构体数组举例#includeUsing namespace std;Struct studentint num;char name20;float score;int main()0联合体联合体n声明
6、形式:声明形式:union 联合名联合名 数据类型数据类型 成员名成员名 1; 数据类型数据类型 成员名成员名 2; : 数据类型数据类型 成员名成员名 n; ;n联合体类型变量说明的语法形式联合体类型变量说明的语法形式联合名联合名 联合变量名;联合变量名;n引用形式:引用形式:联合名联合名.成员名成员名例:例: union uarea char c_data; short s_data; long l_data;uareac_datal_datas_data联合体联合体无名联合无名联合n无名联合没有标记名,只是声明一个成员无名联合没有标记名,只是声明一个成员项的集合,这些成员项具有相同的内存
7、地项的集合,这些成员项具有相同的内存地址,可以由成员项的名字直接访问。址,可以由成员项的名字直接访问。n例:例:union int i; float f;在程序中可以这样使用:在程序中可以这样使用:i=10;f=2.2;例例2-15#include struct aircraft int wingspan; int passengers; union float fuel_load; float bomb_load; int pallets; ; fighter, bomber, transport;int main( ) fighter.wingspan = 40; fighter.pass
8、engers = 1; fighter.fuel_load = 12000.0; bomber.wingspan = 90; bomber.passengers = 12; bomber.bomb_load = 14000.0; transport.wingspan = 106; transport.passengers = 4; transport.pallets = 42; transport.fuel_load = 18000.0; fighter.pallets = 4; cout The fighter carries fighter.pallets pallets.n; cout
9、The bomber bomb load is bomber.bomb_load n; return 0;运行结果:运行结果: The fighter carries 4 pallets. The bomber bomb load is 14000自定义数据类型自定义数据类型ntypedef语句语句n为一个已有的数据类型另外命名为一个已有的数据类型另外命名n语法形式语法形式typedef 已有类型名已有类型名 新类型名表新类型名表;n例如例如typedef double area,volume;typedef int natural;natural i1,i2;area a;volume v;
10、1.先按定义变量的方法写出定义体先按定义变量的方法写出定义体(如:如:int i;)2.将变量名换成新类型名(如将将变量名换成新类型名(如将i换成换成COUNT )3.在最前面加上在最前面加上typedef(typedef int COUNT )4.然后可以用新类型名去定义变量。然后可以用新类型名去定义变量。COUNT i,j;枚举类型枚举类型enumn只要将需要的变量值一一列举出来,便构成了一只要将需要的变量值一一列举出来,便构成了一个枚举类型。个枚举类型。n枚举类型的声明形式如下:枚举类型的声明形式如下:enum 枚举类型名枚举类型名 变量值列表变量值列表;n例如:例如:enum week
11、day sun,mon,tue,wed,thu,fri,sat;枚举类型枚举类型enumn枚举类型应用说明:枚举类型应用说明:u 对枚举元素按常量处理,不能对它们赋值。例对枚举元素按常量处理,不能对它们赋值。例如,不能写:如,不能写:sun=0;u 枚举元素具有缺省值,它们依次为:枚举元素具有缺省值,它们依次为: 0,1,2,.。u 也可以在声明时另行指定枚举元素的值,如:也可以在声明时另行指定枚举元素的值,如:enum weekday sun=7,mon=1,tue,wed,thu,fri,sat;u枚举值可以进行关系运算。枚举值可以进行关系运算。u 整数值不能直接赋给枚举变量,如需整数值不
12、能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强要将整数赋值给枚举变量,应进行强制类型转换。制类型转换。例例2-11 n设某次体育比赛的结果有四种可能:胜(设某次体育比赛的结果有四种可能:胜(win)、)、负(负(lose)、平局()、平局(tie)、比赛取消)、比赛取消(cancel),编写程序顺序输出这四种情况。),编写程序顺序输出这四种情况。n分析:由于比赛结果只有四种可能,所以可以声分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。放比赛结果。#include enum game_resul
13、t WIN, LOSE, TIE, CANCEL;int main( )game_result result;enum game_result omit = CANCEL;int count; for (count = WIN ; count = CANCEL ; count+) result = (game_result)count; if (result = omit) cout The game was cancelledn; else cout The game was played ; if (result = WIN) cout and we won!; if (result =
14、LOSE) cout and we lost.; cout n; return 0;运行结果运行结果 The game was played and we won! The game was played and we lost. The game was played The game was cancelled有三个字符串,要求找出其中最小有三个字符串,要求找出其中最小者者#include#includeusing namespace std;void main()char string80;char str380;cout“请输入三个字符串:请输入三个字符串:n”;for(int i=0
15、;i3;i+)cin.getline(stri,80);if(strcmp(str0,str1)0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);cout“最小的字符串为:最小的字符串为:”stringstring1;cout=、 4.也可以用也可以用“+=”将一个字符串加到另一个字符串的将一个字符串加到另一个字符串的末尾末尾string str3;str3=str1+str2;str1+=str2; (三)字符串数组(三)字符串数组string name5;/定
16、义有一个字符串数组,它包含定义有一个字符串数组,它包含5个字符串元素个字符串元素string name5=“zhang”,”li”,”fan”,”wang”,”tan”注意:注意:(1)它里面包含若干个元素。每个元素相当于一个字符串。)它里面包含若干个元素。每个元素相当于一个字符串。(2)并不要求每个字符串元素具有相同的长度。它的长度也是可)并不要求每个字符串元素具有相同的长度。它的长度也是可以变化的,如对某一个元素重新赋值。以变化的,如对某一个元素重新赋值。(3)在字符串数组中的每一个元素中存放的是一个字符串,而不)在字符串数组中的每一个元素中存放的是一个字符串,而不是字符。是字符。(4)在
17、每一个字符串元素中只包含字符串本身的字符,不包含)在每一个字符串元素中只包含字符串本身的字符,不包含0#include#includeusing namespace std;int main()string s1=“DEF”,s2=“123”;char cp1=“ABC”;char cp2=“DEF”;couts1endl;couts2endl;cout“length of s2:”s2.length()endl;coutcp1;coutcp2;s2+=s1;cout“s2=s2+s1:”s2;cout“length of s2:”s2.length()endl;输入三个字符串,要求按字母从小
18、到大的顺序输入三个字符串,要求按字母从小到大的顺序输出输出#include#includeusing namespace std;int main() string string1,string2,string3,temp; coutstring1string2string3; if(string2string3) temp=string2; string2=string3; string3=temp; if(string1=string2) coutstring1 string2 string3endl; else if(string1=string3) coutstring2 string
19、1 string3endl; else coutstring2 string3 string3endl;函数函数n3.1 函数的定义和使用函数的定义和使用n3.2 内联函数内联函数n3.3 带缺省形参值的函数带缺省形参值的函数n3.4 函数重载函数重载n3.5 C+系统函数系统函数Main ( )Func1 ( )Func2 ( )Func3 ( )Func4 ( )Func5 ( )主函数主函数main()()调用函数func1函数函数func1()()调用函数func2函数函数fun2()()n函数是面向对象程序设计中的基本抽象单元,函数是面向对象程序设计中的基本抽象单元,n是对功能的抽象
20、是对功能的抽象l可以把特定的功能集中由函数来完成。函数完成可以把特定的功能集中由函数来完成。函数完成固定的规划好的功能,在程序编写中如果需要使用固定的规划好的功能,在程序编写中如果需要使用这样的功能就可以通过调用这个函数来实现。不管这样的功能就可以通过调用这个函数来实现。不管这个函数实现的功能有多复杂,调用它只需要很少这个函数实现的功能有多复杂,调用它只需要很少的语句,而且调用形式是固定不变的。的语句,而且调用形式是固定不变的。l例:如果我们经常需要计算某两个自然数之间所例:如果我们经常需要计算某两个自然数之间所有自然数的和,我们就可以写一个函数,以后需要有自然数的和,我们就可以写一个函数,以
21、后需要使用这个功能时,就可通过简单的函数调用来完成使用这个功能时,就可通过简单的函数调用来完成了。了。lint totalbetween(int a,int b)lint i;l int sum=0;l for(i=a;i=b;i+)l sum+=i;l return sum;llvoid main()ll int s;l s=totalbetween(45,50);l cout“s=“sendl;l couttotalbetween(1,100)endl;ln3.1.1函数的定义函数的定义n函数声明的语法形式函数声明的语法形式类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表) 语
22、句序列语句序列若无参数,写若无参数,写void是被初始化的内部是被初始化的内部变量,寿命和可见变量,寿命和可见性仅限于函数内部性仅限于函数内部若无返回值,写若无返回值,写void3.1函数的定义与使用函数的定义函数的定义n形式参数表形式参数表 name1, name2, ., namenn函数的返回值函数的返回值u由由 return 语句给出,例如:语句给出,例如:return 0u无返回值的函数(无返回值的函数(void类型),不必写类型),不必写return语句。语句。函数的调用函数的调用n1 、函数调用、函数调用n调用前先说明函数原型:调用前先说明函数原型:u在调用函数的说明部分,或程序
23、文件开头所在调用函数的说明部分,或程序文件开头所有函数之前,按如下形式说明:有函数之前,按如下形式说明: 类型标识符类型标识符 被调用函数名被调用函数名 (含类型说明的形参表)(含类型说明的形参表);n调用形式调用形式 函数名(实参列表)函数名(实参列表)例例3-1 编写一个求编写一个求x的的n次方的函数次方的函数#include doublepower (double x, int n);void main(void)cout 5 to the power 2 is power(5,2) endl;doublepower (double x, int n)double val = 1.0;w
24、hile (n-)val = val*x;return(val);运行结果:运行结果:5 to the power 2 is 25例例3-1 编写一个求编写一个求x的的n次方的函数次方的函数例例3-2 数制转换数制转换题目:题目: 输入一个输入一个8位二进制数,将其转换为十位二进制数,将其转换为十进制数输出。进制数输出。例如:例如:11012 = 1(23) + 1(22) + 0(21) + 1(20) = 1310 所以,如果输入所以,如果输入1101,则应输出,则应输出13#include double power (double x, int n);void main(void)int
25、 i;int value = 0;char ch;cout = 0; i-)cin ch;if (ch = 1)value += int(power(2,i);cout Decimal value is valueendl;2、 函数调用的执行过程函数调用的执行过程main( )调 f u n( )结束fun( )返回保存:返回地址当前现场恢复:主调程序现场返回地址3、 嵌套调用嵌套调用main调fun1( )结束fun1( )调fun2( )返回fun2( )返回例例3-7 输入两个整数,求平方和。输入两个整数,求平方和。#include #include void void main(vo
26、idmain(void) ) intint a,ba,b; ; intint fun1(int fun1(int x,intx,int y); y); cincinab;ab; c o u tc o u t a a 、 b b 的 平 方 和 :的 平 方 和 : fun1fun1(a,b)(a,b)endlendl; ; intint fun1fun1(int (int x,intx,int y) y) intint fun2fun2(int m);(int m); return (fun2(x)+fun2(y); return (fun2(x)+fun2(y); intint fun2fu
27、n2(int m)(int m) return (m return (m* *m);m); 运行结果:运行结果:3 43 4a a、b b的平方和:的平方和:2525n嵌套调用嵌套调用u函数不允许嵌套声明,但可以嵌套调用。函数不允许嵌套声明,但可以嵌套调用。nvoid main()n n c= max(a,b);n.nnint max(int x, int y)nn int factorial(z)n n n .n 4、递归调用、递归调用n函数直接或间接地调用自身,称为递归调用。函数直接或间接地调用自身,称为递归调用。n递归过程的两个阶段:递归过程的两个阶段:u递推:递推: 4!=43! 3!
28、=32! 2!=21! 1!=10! 0!=1未知未知 已知已知u回归:回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知 已知例例3-8 求求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。)0()!1()0(1!nnnnn源程序:源程序:#include #include long long facfac(int(int n) n) long f; long f; if (n0) if (n0) coutcoutn0,data error!n0,data error!endlendl; ; else if (n=0) f=1;el
29、se if (n=0) f=1; else f= else f=facfac(n-1)(n-1)* *n;n; return(freturn(f);); void mainvoid main( ) long long fac(intfac(int n); n); intint n; n; long y; long y; coutcoutEnter a positive integer:;n;n; y= y=facfac(n(n);); coutcoutn!=yn!=yendlendl; ; 运行结果:运行结果:Enter a positive integer:8Enter a positive
30、 integer:88!=403208!=403203.1.3 函数的参数传递机制函数的参数传递机制 传递参数值传递参数值n在函数被调用时才分配形参的存储单元。在函数被调用时才分配形参的存储单元。n实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。n实参类型必须与形参相符。实参类型必须与形参相符。n传递时是传递参数值,即单向传递。传递时是传递参数值,即单向传递。函数的参数传递机制函数的参数传递机制 参数值传递举例参数值传递举例XN被调函数:被调函数:主调函数:主调函数:3 2.5AD = power(A,3) 2.53double power(double X, int N)例例3-
31、11 输入两输入两 整数交换后输出整数交换后输出#includevoid Swap(int a, int b);int main( )int x(5), y(10);coutx=x y=yendl;Swap(x,y);coutx=x y=yendl;return 0;void Swap(int a, int b)int t;t=a;a=b;b=t;运行结果运行结果:x=5 y=10 x=5 y=10函数的参数传递函数的参数传递 用引用做形参用引用做形参n引用是引用是C+比比C扩充的一种派生数据类型扩充的一种派生数据类型 引用是为对象取一个别名引用是为对象取一个别名,不占存储空间不占存储空间.
32、引用类型说明符为引用类型说明符为&例:例: int someInt; int& rInt= someIntn例如例如:int i,j;int &ri=i; /建立一个建立一个intint型的引用型的引用riri, ,并将其并将其 /初始化为变量初始化为变量i i的一个别名的一个别名j=10;ri=j;/相当于相当于 i=j;someIntrInt例:例: void main( ) int i=100, &refi=i; coutrefiendl; refi+=100; couti; 100200声明一个引用型变量时,必须同时使之初始化,即声明它代表那一个变量。声
33、明一个引用型变量时,必须同时使之初始化,即声明它代表那一个变量。并且从此不可改变。并且从此不可改变。n一旦一个引用被初始化后,就不能改为指向其它对象。一旦一个引用被初始化后,就不能改为指向其它对象。n引用可以作为形参引用可以作为形参 void swap(int& a, int& b) .例例3-12 输入两个整数交换后输出输入两个整数交换后输出#includevoid Swap(int& a, int& b);int main( )int x(5), y(10);coutx=x y=yendl;Swap(x,y);coutx=x y=yendl;return 0
34、;void Swap(int& a, int& b)int t;t=a;a=b;b=t;运行结果运行结果:x=5 y=10 x=10 y=5例例3-13 引用调用举例引用调用举例#include #include void fiddle(int in1, int &in2);int main( ) int count = 7, index = 12; cout The values are ; coutsetw(5)count; coutsetw(5)indexendl; fiddle(count, index); cout The values are ; couts
35、etw(5)count; coutsetw(5)indexendl; return 0;void fiddle(int in1, int &in2) in1 = in1 + 100; in2 = in2 + 100; cout The values are ; coutsetw(5)in1; coutsetw(5)in2endl;运行结果:运行结果: The values are 7 12 The values are 107 112 The values are 7 112函数调用中的数据流函数调用中的数据流 函数调用中,在主调函数和被调函数中存在着函数调用中,在主调函数和被调函数中
36、存在着一种数据流,包括参数传递和函数的返回值。一种数据流,包括参数传递和函数的返回值。 对于值传递方式的函数调用,通过参数的单对于值传递方式的函数调用,通过参数的单向传递将数据由主调函数传递给被调函数,再由向传递将数据由主调函数传递给被调函数,再由被调函数中的被调函数中的return语句将数据语句将数据(处理后的唯一处理后的唯一结果)回传给主调函数。结果)回传给主调函数。 一般情况下,在引用调用的被调函数中是不需一般情况下,在引用调用的被调函数中是不需要要return语句的,它的数据流入和流出完全由参语句的,它的数据流入和流出完全由参数传递来实现。因此可以根据参数在数据流向中数传递来实现。因此
37、可以根据参数在数据流向中所承担的不同角色,将其分为三类所承担的不同角色,将其分为三类:(1)流入参数:为值调用,对应实参可为常量或)流入参数:为值调用,对应实参可为常量或者具有初始值的变量,由实参单向传递数据给形者具有初始值的变量,由实参单向传递数据给形参。参。(2)流出参数:为引用调用,对应实参必须为变)流出参数:为引用调用,对应实参必须为变量,由形参单向回传数据给实参。量,由形参单向回传数据给实参。(3)流入流出参数:为引用调用,对应实参必须)流入流出参数:为引用调用,对应实参必须为变量且有初始值,先有实参传递数据给形参,为变量且有初始值,先有实参传递数据给形参,再由形参将处理好的数据回传
38、给实参,实现数据再由形参将处理好的数据回传给实参,实现数据的双向传递。的双向传递。 n不同类型参数的示例程序不同类型参数的示例程序1.#include2.#include3.using namespace std;4.void getroots(double,double,double,double&,double&);5.int main()6.7.double a,b,c;8.double root1,root2;9.cout“输入方程的三个系数:输入方程的三个系数:abc;11.getroots(a,b,c,root1,root2);12.coutroot1:root1r
39、oot2=root2endl;13.return 0;14.15.void getroots(double a,double b,double c,double&root1,double&root2)16.17.double temp;18.temp=b*b-4.0*a*c;19.root1=(-b+sqrt(temp)/(2.0*a);20.root2=(-b-sqrt(temp)/(2.0*a); 内联函数内联函数n声明时使用关键字声明时使用关键字 inline。nInline 类型说明符类型说明符 被调函数名(含类型说明的形参表)被调函数名(含类型说明的
40、形参表)n函数体语句;函数体语句;n编译时在调用处用函数体进行替换编译时在调用处用函数体进行替换,节省了参数传递、控制节省了参数传递、控制转移等开销。转移等开销。n注意:注意:u内联函数体内不能有内联函数体内不能有循环语句循环语句和和switch语句。语句。u内联函数的声明必须出现在内联函数第一次被调用之前。内联函数的声明必须出现在内联函数第一次被调用之前。例例3-14 内联函数应用举例内联函数应用举例#includeinline double CalArea(double radius)return 3.14*radius*radius;int main( )double r(3.0);do
41、uble area;area=CalArea(r);coutareaendl;return 0;带默认形参值的函数带默认形参值的函数n函数在定义时可以预先给出默认的形参值,调用时函数在定义时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的如给出实参,则采用实参值,否则采用预先给出的默认形参值。默认形参值。n例如:例如:int add(int x=5,int y=6) return x+y;void main(void) add(10,20); /10+20 add(10); /10+6 add( ); /5+6缺省形参值的说明次序缺省形参值的说明次序n缺省形参值必须
42、缺省形参值必须从右向左从右向左顺序声明,并且在顺序声明,并且在缺省形参值的右面不能有非缺省形参值的参缺省形参值的右面不能有非缺省形参值的参数。因为调用时实参取代形参是从左向右的数。因为调用时实参取代形参是从左向右的顺序。顺序。n例:例:int add(int x,int y=5,int z=6); /正确正确int add(int x=1,int y=5,int z); /错误错误int add(int x=1,int y,int z=6); /错误错误缺省形参值与函数的调用位置缺省形参值与函数的调用位置n调用出现在函数体实现之前时,缺省形参值必调用出现在函数体实现之前时,缺省形参值必须在函数
43、原形中给出;而当调用出现在函数体须在函数原形中给出;而当调用出现在函数体实现之后时,缺省形参值需在函数实现时给出。实现之后时,缺省形参值需在函数实现时给出。n例:例:int add(int x=5,int y=6);void main(void) add( ); /调用在实现前调用在实现前int add(int x,int y) return x+y; int add(int x=5,int y=6) return x+y; void main(void) add( ); /调用在实现后调用在实现后缺省形参值的作用域缺省形参值的作用域n在相同的作用域内,缺省形参值的说明应保持唯一,但在相同的作
44、用域内,缺省形参值的说明应保持唯一,但如果在不同的作用域内,允许说明不同的缺省形参。如果在不同的作用域内,允许说明不同的缺省形参。n例:例:int add(int 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)例例3-15 带缺省形参值的函数举例带缺省形参值的函数举例#include #include int get_volume(int length
45、, int width = 2, int height = 3);int main( )int x = 10, y = 12, z = 15; cout Some box data is ; cout get_volume(x, y, z) endl; cout Some box data is ; cout get_volume(x, y) endl; cout Some box data is ; cout get_volume(x) endl; cout Some box data is ; cout get_volume(x, 7) endl; cout Some box data i
46、s ; cout get_volume(5, 5, 5) endl; return 0;题意:给出长、宽、高,题意:给出长、宽、高,get_volum 函数计算出体积。函数计算出体积。使用缺省形参值。使用缺省形参值。先执行子函数中的输出,再执行主函数中的输出。先执行子函数中的输出,再执行主函数中的输出。int get_volume(int length, int width, int height) coutsetw(5)length setw(5)widthsetw(5)height ; return length * width * height;运行结果:运行结果:Some box da
47、ta is 10 12 15 1800Some box data is 10 12 3 360Some box data is 10 2 3 60Some box data is 10 7 3 210Some box data is 5 5 5 125重载函数的声明重载函数的声明nC+允许功能相近的函数在相同的作用域内以允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,相同函数名声明,从而形成重载。方便使用,便于记忆。便于记忆。n例:例:形参类型不同int add(int x, int y);float add(float x, float y);形参个数不同int
48、add(int x, int y);int add(int x, int y, int z);注意事项注意事项int add(int x,int y);int add(int a,int b);编译器不以编译器不以形参名形参名来区分来区分int add(int x,int y);void add(int x,int y);编译器不以编译器不以返回值返回值来区分来区分u重载函数的形参必须不同重载函数的形参必须不同: 个数不同或类型不同。个数不同或类型不同。u编译程序将根据实参和形参的类型及个数的最佳匹配编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。来选择调用哪一个函数。 不
49、要将不同功能的函数声明为重载函数,以免出现调用不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好:结果的误解、混淆。这样不好:如果某个函数参数有默认值,必须保证其参数默认后调用形如果某个函数参数有默认值,必须保证其参数默认后调用形式不与其他函数混淆。式不与其他函数混淆。int f(int a,int b);void f(int a,float b,int c=0);函数调用语句函数调用语句f(10,2.0);具有二义性,两个都可以调用,不能具有二义性,两个都可以调用,不能根据参数的形式确定到底调用哪个。根据参数的形式确定到底调用哪个。int add(int x,int
50、y) return x+y; float add(float x,float y) return x-y; 例例3-16 重载函数应用举例重载函数应用举例编写三个名为编写三个名为add的重载函数,分别实现两整数的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。相加、两实数相加和两个复数相加的功能。#includestruct complexdouble real;double imaginary;void main(void)int m, n;double x, y;complex c1, c2, c3;int add(int m, int n);double add(doubl
51、e x, double y);complex add(complex c1, complex c2);coutmn;coutinteger m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y) endl;coutc1.realc1.imaginary;coutc2.realc2.imaginary;c3=add(c1,c2);coutcomplex number ( c1.real , c1.imaginary )+(c2.real, c2.imaginary)=(c3.real, c3.imaginary)n;int add(int m,
52、 int n) return m+n; double add(double x, double y) return x+y; complex add(complex c1, complex c2) complex c;c.real=c1.real+c2.real;c.imaginary=c1.imaginary+c2.imaginary;return c;运行结果:运行结果:Enter two integer: 3 5integer 3+5=8Enter two real number: 2.3 5.8real number 2.3+5.8= 8.1Enter the first comple
53、x number: 12.3 45.6Enter the second complex number: 56.7 67.8complex number (12.3,45.6)+(56.7,67.8)= (69,113.4)#includeusing namespace std;struct timeint hour;int minute;const int perhour=60;time sum(time t1,time t2);void show(time t);int main()time one=8,15;time two=6,55;time day=sum(one,two);cout两
54、天总计:两天总计:;show(day);time day3=(9,35);cout三天总计:三天总计:;show(sum(day,day3);return 0;time sum(time t1,time t2)time total;total.minute=(t1.minute+t2.minute)%perhour;total.hour=t1.hour+t2.hour+(t1.minute+t2.minute)/perhour;return total;void show(time t)coutt.hour:t.minuteendl;数组与函数数组与函数#includeusing namesp
55、ace std;int main() int max_value(int x,int max); int i,j,row=0,colum=0,max; int a34=5,12,23,56,19,28,37,46,-12,-34,6,8; max=a00; for(i=0;i=2;i+) for(j=0;j=3j+) max=max_value(aij,max); if(max=aij) row=i; colum=j; cout“max=”max“,row=”row“,colum=”colum,max) return x; else return max;)数组与函数数组与函数#include
56、 using namespace std; int sum_array( const int array, int no_of_elements);main() int values10 = 12,4,5,3,4,0,1,8,2,3; int sum; sum= sum_array( values ,10); cout The sum of the array elements is sum endl;int sum_array(const int array,int no_of_elements) int total=0; for int index =0 ;index no_of_elements ; index+ total += arrayindex; return total;向函数传递多维数组向函数传递多维数组1. # include 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权专利申请与维权指南(标准版)
- 2025精神科护理考试题及答案
- 医学规培考试题型及答案
- 汽车冲压生产线操作工中级模考试题+答案
- 观察事物面试题及答案
- 图书捐赠面试题目及答案
- 专科基础护理考试题及答案
- 小学副高职称考试题库及答案
- 国际贸易实务期末考试模拟试题及答案
- 2025年大学(会展经济与管理)会展经济综合测试题及答案
- 2024-2025学年人教版小升初英语试卷及解答参考
- DL∕T 5210.2-2018 电力建设施工质量验收规程 第2部分:锅炉机组
- 物业管理整体设想
- 铁矿矿石资源开发成本控制分析
- 2024年精神科工作总结与计划
- 国内外医疗器械实用维修手册-CT篇
- GB/T 11345-2023焊缝无损检测超声检测技术、检测等级和评定
- 寒假辅导班招生方案
- 成都信息工程大学
- GB/T 15383-2011气瓶阀出气口连接型式和尺寸
- 《全国普通高等学校毕业生就业协议书》违约申请书
评论
0/150
提交评论