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.
templateclass 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.
templateT max(T a, T b) { return (a > b) ? a : b; }
Unterschied
Der Hauptunterschied zwischen Klassenvorlagen und Funktionsvorlagen ist:
<>
erstellt (z. B. < code> Arraymax(3, 5)
) .<>
符号(例如
Array
)显式实例化,而函数模板是通过调用该函数并传递类型参数(例如
max(3, 5)
)隐式实例化的。
实战案例
类模板:创建一个Pair
类模板,它存储两个不同类型的值。
templateclass 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
对象:
Pairpair(1, "C++"); cout << pair.getKey() << " " << pair.getValue() << endl; // 输出:1 C++
函数模板:创建一个swap
函数模板,用于交换两个不同类型值的顺序。
templatevoid 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: rrreeeFunktionsvorlage: Erstellen Sie einen
Swap
Funktionsvorlage, die zum Austauschen der Reihenfolge zweier unterschiedlicher Wertetypen verwendet wird. rrreeeWir haben die Funktionsvorlage
swap
verwendet, um zwei Ganzzahlen auszutauschen: rrreee
Das 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!