首頁  >  文章  >  後端開發  >  C++ 函式的類別模板和函式模板有何不同?

C++ 函式的類別模板和函式模板有何不同?

WBOY
WBOY原創
2024-04-11 22:03:01824瀏覽

C 模板包含類別模板和函數模板。類別模板允許建立可用於不同資料類型的類,而函數模板可用於不同資料類型的函數。兩者主要差異在於:類別模板明確實例化,函數模板隱式實例化;類別模板中類型參數在整個類別定義中可見,而函數模板中僅在簽名中可見。

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;
}

區別

類別模板和函數模板之間的主要區別在於:

  • 實例化方式:類別模板透過使用a8093152e673feb7aba1828c43532094 符號(例如Arraybd43222e33876353aff11e13a7dc75f6)明確實例化,而函數模板是透過呼叫函數並傳遞類型參數(例如maxbd43222e33876353aff11e13a7dc75f6(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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn