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

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

WBOY
WBOYOriginal
2024-04-11 22:03:01848Durchsuche

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 <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:

  • Instanziierung: Klassenvorlagen werden mithilfe des Symbols a8093152e673feb7aba1828c43532094 erstellt (z. B. Arraybd43222e33876353aff11e13a7dc75f6) wird explizit instanziiert, wohingegen eine Funktionsvorlage implizit durch Aufrufen der Funktion und Übergeben des Typarguments instanziiert wird (z. B. 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

Sichtbarkeit: 🎜Typparameter in Klassenvorlagen sind in der gesamten Klassendefinition sichtbar, während Typparameter in Funktionsvorlagen nur in der Funktionssignatur sichtbar sind. 🎜🎜Praktischer Fall🎜🎜🎜🎜Klassenvorlage: 🎜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
🎜Wir verwenden die Klassenvorlage 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: 🎜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!

Stellungnahme:
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