>[info] # 函數的重載
## **重載的需要性**
在不同類型上做類似運算而又用相同名字的情況稱為**重載 (function overloading)**,即重新定義語義.
~~~
//重載前:
int abs(int);
long fbs(long);
double lbs(double);
//重載后
int abs(int);
long abs(long);
double abs(double);
~~~
**重載解析**:C++用一種函數命名技術可以準確判斷應該調用哪個重載函數.
~~~
abs(10) //調用int abs(int)
abs(100000000000) //調用long abs(long)
abs(10.000000000) //調用double abs(double)
~~~
## **使用說明**
* 返回類型不能單獨作為重載解析的依據;參數個數,類型,順序三者種必須至少有一種不同.
如: void func(int);
int func(int); //error
* 不能用typedef定義的類型名來區分重載函數聲明中的參數.
* 讓重載執行不同的功能,是不好的編程風格.
## **例子**
~~~
void print(double);
void print(int);
void func()
{
print(1); //匹配void print(int)
printf(1.0); //匹配void print(double)
print(’a’); //匹配void print(int)
print(3.1415f); //匹配void print(double)
}
~~~
~~~
/* ***求3個數中最大的數(分別考慮整數,雙精度數,長整數的情況)*** */
#include <iostream>
using namespace std;
int main( )
{
int max(int a,int b,int c); //函數聲明
double max(double a,double b,double c); //函數聲明
long max(long a,long b,long c); //函數聲明
int i1,i2,i3,i;
cin>>i1>>i2>>i3; //輸入3個整數
i=max(i1,i2,i3); //求3個整數中的最大者
cout<<”i_max=”<<i<<endl;
double d1,d2,d3,d;
cin>>d1>>d2>>d3; //輸入3個雙精度數
d=max(d1,d2,d3); //求3個雙精度數中的最大者
cout<<”d_max=”<<d<<endl;
long g1,g2,g3,g;
cin>>g1>>g2>>g3; //輸入3個長整數
g=max(g1,g2,g3); //求3個長整數中的最大者
cout<<”g_max=”<<g<<endl;
}
int max(int a,int b,int c) //定義求3個整數中的最大者的函數
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
double max(double a,double b,double c) //定義求3個雙精度數中的最大者的函數
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
long max(long a,long b,long c) //定義求3個長整數中的最大者的函數
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
~~~
~~~
/* ***求兩個整數或3個整數中的最大數*** */
#include <iostream>
using namespace std;
int main( )
{
int max(int a,int b,int c); //函數聲明
int max(int a,int b); //函數聲明
int a=8,b=-12,c=27;
cout<<”max(a,b,c)=”<<max(a,b,c)<<endl; //輸出3個整數中的最大者
cout<<”max(a,b)=”<<max(a,b)<<endl; //輸出兩個整數中的最大者
}
int max(int a,int b,int c) //此max函數的作用是求3個整數中的最大者
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int max(int a,int b) //此max函數的作用是求兩個整數中的最大者
{
if(a>b) return a;
else return b;
}
~~~
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類