C 模板包含類別模板和函數模板。類別模板允許建立可用於不同資料類型的類,而函數模板可用於不同資料類型的函數。兩者主要差異在於:類別模板明確實例化,函數模板隱式實例化;類別模板中類型參數在整個類別定義中可見,而函數模板中僅在簽名中可見。
C 中的類別模板與函數模板
C 模板是一項強大的語言特性,它允許我們創建可重複使用代碼,該代碼可用於各種資料類型。 C 提供了兩種類型的模板:類別模板和函數模板。
類別範本
類別範本可讓我們建立可用於不同資料類型的類別。換句話說,它允許我們創建一種藍圖,該藍圖可以用於創建具有不同資料類型(例如整數、浮點數或其他自訂類別)的物件。
template <typename T> class Array { public: Array(int size) : size(size), data(new T[size]) {} ~Array() { delete[] data; } T& operator[](int index) { return data[index]; } private: int size; T* data; };
函數範本
函數範本可讓我們建立可用於不同資料類型的函數。同樣,它允許我們創建一種模板,該模板可以用於創建具有不同參數類型和返回值類型的函數。
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
區別
類別模板和函數模板之間的主要區別在於:
<>
符號(例如Array<int>
)明確實例化,而函數模板是透過呼叫函數並傳遞類型參數(例如max<int>(3, 5)
)隱含實例化的。 實戰案例
類別模板:建立一個Pair
類別模板,它儲存兩個不同類型的值。
template <typename K, typename V> class Pair { public: Pair(K key, V value) : key(key), value(value) {} K getKey() { return key; } V getValue() { return value; } private: K key; V value; };
我們使用Pair
類別模板建立了一個儲存整數鍵和字串值的Pair
物件:
Pair<int, string> pair(1, "C++"); cout << pair.getKey() << " " << pair.getValue() << endl; // 输出:1 C++
函數模板:建立一個swap
函數模板,用於交換兩個不同類型值的順序。
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
我們使用 swap
函數模板交換了兩個整數:
int x = 1; int y = 2; swap(x, y); // 互换 x 和 y 的值 cout << x << " " << y << endl; // 输出:2 1
以上是C++ 函式的類別模板和函式模板有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!