您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++泛型編程的方法是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++泛型編程的方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
我們先來看看數據結構的特點:1、專注于數據元素之間的關系;2、專注于特定結構之上的算法。數據結構并不關注數據元素的具體類型!
那么如何為數據結構的學習選擇合適的語言呢?我們之前有見到過 C 語言版的數據結構,也有 C++ 版的數據結構。但是從耦合性的角度來看,支持泛型編程的語言最適合數據結構的學習。所謂泛型編程便指的是不考慮具體數據類型的編程方式。對于 Swap 函數可以考慮寫成泛型寫法,如下
void Swap(T& a, T& b) { T t = a; a = b; b = t; }
Swap 泛型寫法中的 T 不是一個具體的數據類型,而是泛指任意的數據類型,這樣我們是不是就可以代碼復用了,不用重復的搬磚了。泛型編程對應于 C++ 中的函數模板,它是一種特殊的函數可用不同類型進行調用。它看起來和普通函數很相似,其區別是類型可被參數化。函數模板格式如下
template < typename T > void Swap(T& a, T& b) { T t = a; a = b; b = t; }
下來我們來看看函數模板的語法規則:1、template 關鍵字用于聲明開始進行泛型編程;2、typename 關鍵字用于聲明泛指類型。如下圖所示
我們來看看函數模板的使用:1、自動類型推倒調用;2、具體類型顯示調用。具體如下
int a = 0; int b = 1; Sawp(a, b); // 自動推導 float c= 2; float d = 3; Swap<float>(c, d); // 顯示調用
我們下面還是以代碼為例來進行說明
#include <iostream> using namespace std; template < typename T > void Swap(T& a, T& b) { T t = a; a = b; b = t; } template < typename T > class Op { public: T process(T v) { return v * v; } }; int main() { int a = 1; int b = 2; Swap(a, b); cout << "a = " << a << ", " << "b = " << b << endl; double c = 0.01; double d = 0.02; Swap<double>(d, c); cout << "c = " << c << ", " << "d = " << d << endl; Op<int> opInt; Op<double> opDouble; cout << "5 * 5 = " << opInt.process(5) << endl; cout << "0.5 * 0.5 = " << opDouble.process(0.5) << endl; return 0; }
我們來編譯看看結果,是否如我們代碼所寫的那樣
C++ 中的類模板是以相同的方式處理不同的類型,在類聲明前使用 template 進行標識;<typename T> 用于說明類中使用的泛指類型 T。類模板只能顯示指定具體類型,是無法進行自動推導的;使用具體類型 <Type> 定義對象。在上面的例子中,如果我們在第39, 40行不指定具體類型時,看看會發生什么?
讀到這里,這篇“C++泛型編程的方法是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。