1 C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。 2 例: 3 形参类型不同 4 int add(int x, int y); 5 float add(float x, float y); 6 形参个数不同 7 int add(int x, int y); 8 int add(int x, int y, int z); 9 重载函数的形参必须不同: 个数不同或类型不同。 10 编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。 11 12 13 int add(int x,int y); 14 int add(int a,int b); 15 编译器不以形参名来区分 16 17 18 int add(int x,int y); 19 void add(int x,int y); 20 编译器不以返回值来区分 21 22 不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好: 23 int add(int x,int y) 24 { return x+y; 25 } 26 float add(float x,float y) 27 { return x-y; 28 } 29 30 31 编写三个名为add的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。 32 #include<iostream> 33 using namespace std; 34 struct complex 35 { 36 double real; 37 double imaginary; 38 }; 39 void main(void) 40 { 41 int m, n; 42 double x, y; 43 complex c1, c2, c3; 44 int add(int m, int n); 45 double add(double x, double y); 46 complex add(complex c1, complex c2); 47 48 cout<<"Enter two integer: "; 49 cin>>m>>n; 50 cout<<"integer "<<m<<'+'<<n<<"="<<add(m,n)<<endl; 51 cout<<"Enter two real number: "; 52 cin>>x>>y; 53 cout<<"real number "<<x<<'+'<<y<<"= "<<add(x,y) 54 <<endl; 55 56 cout<<"Enter the first complex number: "; 57 cin>>c1.real>>c1.imaginary; 58 cout<<"Enter the second complex number: "; 59 cin>>c2.real>>c2.imaginary; 60 c3=add(c1,c2); 61 cout<<"complex number (" <<c1.real<< ',' 62 << c1.imaginary <<")+("<<c2.real<<',' 63 <<c2.imaginary<<")=("<<c3.real<<',' 64 <<c3.imaginary<<")\n"; 65 } 66 int add(int m, int n) 67 { return m+n; } 68 69 double add(double x, double y) 70 { return x+y; } 71 72 complex add(complex c1, complex c2) 73 { 74 complex c; 75 c.real=c1.real+c2.real; 76 c.imaginary=c1.imaginary+c2.imaginary; 77 return c; 78 }