區別於重寫:重寫是同樣的函數定義,重寫修改實現代碼
重載:
#include <iostream>
using namespace std;
int main (int argc, const char * argv[])
{
int max(int a,int b);
int max(int a,int b ,int c);
int a = 8;
int b = -12;
int c = 27;
cout<<"max(a,b,c)="<<max(a,b,c)<<endl;
cout<<"max(a,b)="<<max(a,b)<<endl;
return 0;
}
int max(int a,int b,int c)
{
if(b>a)
a = b;
if(c>a)
a=c;
return a;
}
int max(int a,int b)
{
if (a>b) {
return a;
}else
{
return b;
}
}
**********************************
2、函數模版:
建立一個通用函數,函數類型和形參類型不具體指定,用一個虛擬的類型代表
通用函數定義: typename <typename T >
temlate <typename T>//模版聲明
Tmax(T a,T b,T c) //定義一個通用函數,用T作虛擬類型名
{if(b>a) a=b;
return a
}
int main(){
int m =15, int n = 125, int q=45;
i = max(m,n,q);//調用模版函數,此時int代替了T
}
3、有默認參數的函數:
很簡單的就是給形參一個默認值:float findnumber(a = 3.6);
對於我在重載函數所給出的例子中,用帶參函數也可以實現功能;
int max(int a,int b,int c = 0);
在比較兩個數的時候,第三個數默認爲0;
4、函數的嵌套調用:
C++中不允許作嵌套定義,不能完整的包含另一個函數
但是能夠嵌套調用很熟,(再調用一個函數的同時,又可以調用另一個函數)
注意:調用之前必須對沒一個函數作聲明;
5、函數的遞歸調用:
在調用函數的過程中又直接或間接的調用函數本身,
獻上一個例子:用遞歸法求階乘
3、有默認參數的函數:
很簡單的就是給形參一個默認值:float findnumber(a = 3.6);
對於我在重載函數所給出的例子中,用帶參函數也可以實現功能;
int max(int a,int b,int c = 0);
在比較兩個數的時候,第三個數默認爲0;
4、函數的嵌套調用:
C++中不允許作嵌套定義,不能完整的包含另一個函數
但是能夠嵌套調用很熟,(再調用一個函數的同時,又可以調用另一個函數)
注意:調用之前必須對沒一個函數作聲明;
5、函數的遞歸調用:
在調用函數的過程中又直接或間接的調用函數本身,
獻上一個例子:用遞歸法求階乘
#include <iostream>
using namespace std;
long fun (int);
int main (int argc, const char * argv[])
{
int m = 0;
cout<<"please enter a number"<<endl;
cin>>m;
cout<<fun(m)<<endl;
return 0;
}
long fun(int n)
{
long c;
if(n==1)c =1;
else
c = fun(n-1)*n;
return c;
}