發散性問題
c++中有幾種交換變數的方法?
定義巨集**塊 vs 定義函式
程式設計實驗
#include #includeusing
namespace
std;
#define swap(t,a,b) \do\
while(0
)int
main()
利用定義巨集**塊的方法看上去很完美,但是巨集是預處理器處理的程式單元,後續出場的編譯器根本不知道巨集的存在,因此不推薦用巨集來完成類似函式的功能。因為不安全。
直接定義函式
#include #includeusing
namespace
std;
void swap(int& a, int&b)
void swap(double& a, double&b)
void swap(string& a, string&b)
intmain()
定義巨集**塊
-優點:**復用,適合所有的型別
-缺點:編譯器不知道巨集的存在,缺少型別檢查
定義函式
-優點:真正的函式呼叫,編譯器對型別進行檢查
-缺點:根據型別重複定義函式,無法**復用
泛型程式設計
-不考慮具體資料型別的程式設計方式
對於swap函式可以考慮下面的泛型寫法
void swap(t& a, t& b)
swap泛型寫法中的t不是乙個具體的資料型別,而是泛指任意的資料型別
函式模板
c++中泛型程式設計
-函式模板
一種特殊的函式可用不同型別進行呼叫
看起來和普通函式很相似,區別是型別可被引數化
template
void swap(t& a, t& b)
函式模板的語法規則
-template關鍵字用於宣告開始進行泛型程式設計
-typename關鍵字用於宣告泛指型別
template告訴編譯器開始泛型程式設計
typename t 告訴編譯器t是乙個泛指型別
函式模板的使用
-自動型別推導呼叫
-具體型別顯示呼叫
int a = 0;
int b = 1;
swap(a,b) //自動推導
float c = 2;
float d = 3;
swap(c,d); //顯示呼叫
函式模板初探:
#include #includeusing
namespace
std;
template
void swap(t& a, t&b)
intmain()
#include #includeusing
namespace
std;
template
void swap(t& a, t&b)
template
void sort(t a, int
len)}}
}template
void println(t a,int
len)
cout
<}int
main()
; println(a,5);
sort(a,5);
println(a,5);
string s=;
println(s,5);
sort(s,5);
println(s,5);
return0;
}
小結:函式模板是泛型程式設計在c++中的應用方式之一
函式模板能夠根據實參對引數型別進行推導
函式模板支援顯示的指定引數型別
函式模板是c++中重要的**復用方式
56 函式模板的概念和意義
1 發散性的問題 c 中有幾種交換變數的方法?答 兩種,定義巨集 塊 vs 定義函式 define swap t,a,b void swap int a,int b 定義巨集 塊 和 定義函式都能交換變數。但是對於巨集 塊,是由預處理器處理,編譯器不知道巨集 塊的存在。定義函式的話一次只能實現一種型...
第56課 函式模板的概念和意義
1.1 巨集 塊 vs 函式 變數的交換 include include using namespace std 巨集定義 塊 define swap t,a,b do while 0 這裡不加這個分號 可能是保證乙個整體,保證當做一條語句處理。for swap 考慮一下這種情況 定義函式方式 vo...
C 深度解析 45 函式模板的概念和意義
1.發散性問題 2.程式設計實驗 include include using namespace std 巨集定義 塊 define swap t,a,b do while 0 這裡不加這個分號 可能是保證乙個整體,保證當做一條語句處理。定義函式方式 void swap int a,int b 引用...