C++函數
本文僅討論C++中新增的函數功能,已默認具有C語言基礎。
函數的默認參數
函數的形參支持在定義函數時設置默認參數。
默認參數優先級低于實參。若此參數無實參,其將使用位于形參處設置的默認參數;若此參數有實參,則將使用實參值。
默認參數必須在形參表從右至左進行設置,不能跳躍參數設置。
通過默認參數,可以不同數量的實參調用相同函數。
例:
void fun(int a,int b=10,int c=20);
//調用:
fun(10);//a=10,b=10,c=20
fun(10,20);//a=10,b=20,c=20
fun(10,20,30);//a=10,b=20,c=30
函數重載(函數多態)
多態即一個對象可以具有多種形式,是C++的面向對象重要內容。函數的多態——函數重載,指對函數名進行重載,允許創建多個形參表不同的同名函數,它們構成了同名函數族。
形參表不同:若兩個函數的形參數目或數據類型不同,則認為其形參表不同。注意,引用和非引用視為相同數據類型。
調用具有重載的函數時,編譯器會首先檢查實參的數據類型與哪個函數形參的數據類型相匹配;若沒有嚴格匹配項,編譯器將會自動嘗試進行強制類型轉換以匹配,但若經過強制類型轉換后能與多個函數的形參數據類型匹配,則會產生錯誤。
注意,函數重載僅檢查函數形參表是否不同,不檢查函數返回值類型是否不同。即若函數形參表相同,但函數返回值不同,則無法進行重載。
通過函數重載,可以使用多個同名且形參表不同的函數。
例:以下print函數將支持多種數據類型的傳入
void print(int a);
void print(float a);
void print(string a);
void print(int[] a);
函數模板
泛型編程,是指并不關心數據類型,將數據類型抽象出來(可近似理解為抽象數據類型,ADT),從而建立更通用化的程序。泛型是實現C++面向對象特性的重要組成部分。模板(Template)是泛型編程的重要內容,分為函數模板與類模板。
通過函數模板引入泛型函數,可在定義函數形參時并不關心實際數據類型,從而建立通用函數。編譯器根據傳入的實參進行自動類型推導,從而生成對應數據類型版本的函數實例。
-
先聲明后定義:
template<typename 泛型名1,typename 泛型名2,...> -
邊聲明邊定義:
template<typename 泛型名1,typename 泛型名2,...> 返回值類型 函數名(形參表){ //語句 }
<>中的內容稱為模板參數,其中typename為關鍵字,也可替換為class,泛型在定義后即可像常規數據類型使用,但定義的所有泛型必須全部使用。
例:
template<typename T>
T sum(T a,T b){
return a+b;
}
//調用:
add(2,3);//自動創建int版本的sum
add(1.1,1.2);//自動創建double版本的sum

浙公網安備 33010602011771號