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++ ?
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.
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 :
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
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 : 🎜rrreeeCe 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!