Maison >développement back-end >C++ >Quelle est la différence entre les modèles de classe et les modèles de fonctions pour les fonctions C++ ?

Quelle est la différence entre les modèles de classe et les modèles de fonctions pour les fonctions C++ ?

WBOY
WBOYoriginal
2024-04-11 22:03:01848parcourir

Les modèles C++ incluent des modèles de classe et des modèles de fonctions. Les modèles de classe permettent la création de classes pouvant être utilisées avec différents types de données, tandis que les modèles de fonctions peuvent être utilisés avec des fonctions de différents types de données. La principale différence entre les deux est que les modèles de classe sont instanciés explicitement et que les modèles de fonction sont instanciés implicitement ; dans les modèles de classe, les paramètres de type sont visibles dans la définition entière de la classe, tandis que dans les modèles de fonction, ils ne sont visibles que dans la signature.

C++ 函数的类模板和函数模板有何区别?

Modèles de classe et modèles de fonction en C++

Les modèles C++ sont une fonctionnalité de langage puissante qui nous permet de créer du code réutilisable pouvant être utilisé avec différents types de données. C++ propose deux types de modèles : les modèles de classe et les modèles de fonctions.

Modèles de classe

Les modèles de classe nous permettent de créer des classes qui peuvent être utilisées pour différents types de données. En d'autres termes, cela nous permet de créer un plan qui peut être utilisé pour créer des objets avec différents types de données tels que des entiers, des flottants ou d'autres classes personnalisées.

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

Modèles de fonctions

Les modèles de fonctions nous permettent de créer des fonctions qui peuvent être utilisées sur différents types de données. De même, cela nous permet de créer un modèle qui peut être utilisé pour créer des fonctions avec différents types de paramètres et types de valeurs de retour.

template <typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}

Différence

La principale différence entre les modèles de classe et les modèles de fonction est :

  • Comment instancier : Les modèles de classe sont créés en utilisant le symbole a8093152e673feb7aba1828c43532094 (par exemple Arraybd43222e33876353aff11e13a7dc75f6) est instancié explicitement, alors qu'un modèle de fonction est instancié implicitement en appelant la fonction et en passant l'argument de type (par exemple maxbd43222e33876353aff11e13a7dc75f6(3, 5)) .
  • 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

Visibilité : 🎜Les paramètres de type dans les modèles de classe sont visibles dans toute la définition de la classe, tandis que les paramètres de type dans les modèles de fonction ne sont visibles que dans la signature de la fonction. 🎜🎜Cas pratique🎜🎜🎜🎜Modèle de classe : 🎜Créez un modèle de classe Paire, qui stocke deux types de valeurs différents. 🎜
int x = 1;
int y = 2;
swap(x, y); // 互换 x 和 y 的值
cout << x << " " << y << endl; // 输出:2 1
🎜Nous utilisons le modèle de classe Pair pour créer un objet Pair qui stocke les clés entières et les valeurs de chaîne : 🎜rrreee🎜🎜Modèle de fonction : 🎜Créer un swap Modèle de fonction, utilisé pour échanger l'ordre de deux types de valeurs différents. 🎜rrreee🎜Nous avons utilisé le modèle de fonction swap pour échanger deux entiers : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn