Was ist der Unterschied zwischen Klassenvorlagen und Funktionsvorlagen für C++-Funktionen?

WBOY
Freigeben: 2024-04-11 22:03:01
Original
736 Leute haben es durchsucht

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.

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

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  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; };
Nach dem Login kopieren

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  T max(T a, T b) { return (a > b) ? a : b; }
Nach dem Login kopieren

Unterschied

Der Hauptunterschied zwischen Klassenvorlagen und Funktionsvorlagen ist:

  • Instanziierung:Klassenvorlagen werden mithilfe des Symbols<>erstellt (z. B. < code> Array) wird explizit instanziiert, wohingegen eine Funktionsvorlage implizit durch Aufrufen der Funktion und Übergeben des Typarguments instanziiert wird (z. B.max(3, 5)) .
  • <>符号(例如 Array)显式实例化,而函数模板是通过调用该函数并传递类型参数(例如 max(3, 5))隐式实例化的。
  • 可见性:类模板中的类型参数在整个类定义中都可见,而函数模板中的类型参数仅在函数签名中可见。

实战案例

类模板:创建一个Pair类模板,它存储两个不同类型的值。

template  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; };
Nach dem Login kopieren

我们使用Pair类模板创建了一个存储整数键和字符串值的Pair对象:

Pair pair(1, "C++"); cout << pair.getKey() << " " << pair.getValue() << endl; // 输出:1 C++
Nach dem Login kopieren

函数模板:创建一个swap函数模板,用于交换两个不同类型值的顺序。

template  void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
Nach dem Login kopieren

我们使用swap

Sichtbarkeit: Typparameter in Klassenvorlagen sind in der gesamten Klassendefinition sichtbar, während Typparameter in Funktionsvorlagen nur in der Funktionssignatur sichtbar sind.Praktischer FallKlassenvorlage: Erstellen Sie eine 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
Nach dem Login kopieren
Wir verwenden die Klassenvorlage Pair, um ein Pair-Objekt zu erstellen, das Ganzzahlschlüssel und Zeichenfolgenwerte speichert: rrreeeFunktionsvorlage: Erstellen Sie einen SwapFunktionsvorlage, die zum Austauschen der Reihenfolge zweier unterschiedlicher Wertetypen verwendet wird. rrreeeWir haben die Funktionsvorlage swapverwendet, 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!