C++-Vorlagen umfassen Klassenvorlagen und Funktionsvorlagen. Klassenvorlagen ermöglichen die Erstellung von Klassen, die mit unterschiedlichen Datentypen verwendet werden können, während Funktionsvorlagen mit Funktionen unterschiedlicher Datentypen verwendet werden können. Der Hauptunterschied zwischen den beiden besteht darin, dass Klassenvorlagen explizit instanziiert werden und Funktionsvorlagen implizit instanziiert werden. In Klassenvorlagen sind Typparameter in der gesamten Klassendefinition sichtbar, während sie in Funktionsvorlagen nur in der Signatur sichtbar sind.
Klassenvorlagen vs. Funktionsvorlagen in C++
C++-Vorlagen sind eine leistungsstarke Sprachfunktion, die es uns ermöglicht, wiederverwendbaren Code zu erstellen, der mit verschiedenen Datentypen verwendet werden kann. C++ bietet zwei Arten von Vorlagen: Klassenvorlagen und Funktionsvorlagen.
Klassenvorlagen
Klassenvorlagen ermöglichen es uns, Klassen zu erstellen, die für verschiedene Datentypen verwendet werden können. Mit anderen Worten: Es ermöglicht uns, einen Entwurf zu erstellen, der zum Erstellen von Objekten mit unterschiedlichen Datentypen wie Ganzzahlen, Gleitkommazahlen oder anderen benutzerdefinierten Klassen verwendet werden kann.
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; };
Funktionsvorlagen
Funktionsvorlagen ermöglichen es uns, Funktionen zu erstellen, die für verschiedene Datentypen verwendet werden können. Ebenso ermöglicht es uns, eine Vorlage zu erstellen, mit der Funktionen mit unterschiedlichen Parametertypen und Rückgabewerttypen erstellt werden können.
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
Unterschied
Der Hauptunterschied zwischen Klassenvorlagen und Funktionsvorlagen ist:
<>
erstellt (z. B. < code> Array<int>) wird explizit instanziiert, wohingegen eine Funktionsvorlage implizit durch Aufrufen der Funktion und Übergeben des Typarguments instanziiert wird (z. B. max<int>(3, 5)
) . <>
符号(例如 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
Pair
-Klassenvorlage, die zwei verschiedene Arten von Werten speichert. 🎜int x = 1; int y = 2; swap(x, y); // 互换 x 和 y 的值 cout << x << " " << y << endl; // 输出:2 1
Pair
, um ein Pair
-Objekt zu erstellen, das Ganzzahlschlüssel und Zeichenfolgenwerte speichert: 🎜rrreee🎜🎜Funktionsvorlage: 🎜Erstellen Sie einen Swap
Funktionsvorlage, die zum Austauschen der Reihenfolge zweier unterschiedlicher Wertetypen verwendet wird. 🎜rrreee🎜Wir haben die Funktionsvorlage swap
verwendet, um zwei Ganzzahlen auszutauschen: 🎜rrreeeDas obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Klassenvorlagen und Funktionsvorlagen für C++-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!