Templat C++ termasuk templat kelas dan templat fungsi. Templat kelas membenarkan penciptaan kelas yang boleh digunakan dengan jenis data yang berbeza, manakala templat fungsi boleh digunakan dengan fungsi jenis data yang berbeza. Perbezaan utama antara kedua-duanya ialah templat kelas diwujudkan secara eksplisit, dan templat fungsi secara tersirat dalam templat kelas, parameter jenis boleh dilihat dalam keseluruhan definisi kelas, manakala dalam templat fungsi ia hanya kelihatan dalam tandatangan.
Templat Kelas lwn. Templat Fungsi dalam C++
Templat C++ ialah ciri bahasa yang berkuasa yang membolehkan kami mencipta kod boleh guna semula yang boleh digunakan dengan pelbagai jenis data. C++ menyediakan dua jenis templat: templat kelas dan templat fungsi.
Templat Kelas
Templat kelas membolehkan kami mencipta kelas yang boleh digunakan untuk jenis data yang berbeza. Dalam erti kata lain, ia membolehkan kami membuat pelan tindakan yang boleh digunakan untuk mencipta objek dengan jenis data yang berbeza seperti integer, terapung atau kelas tersuai yang lain.
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; };
Templat Fungsi
Templat fungsi membolehkan kami mencipta fungsi yang boleh digunakan pada jenis data yang berbeza. Begitu juga, ia membolehkan kami mencipta templat yang boleh digunakan untuk mencipta fungsi dengan jenis parameter yang berbeza dan jenis nilai pulangan.
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
Perbezaan
Perbezaan utama antara templat kelas dan templat fungsi ialah:
<></gt;</gt; kod> Tatasusunan<int>
) dijadikan instantiated secara eksplisit, manakala templat fungsi dibuat secara tersirat dengan memanggil fungsi dan menghantar hujah jenis (cth. 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
, yang menyimpan dua jenis nilai yang berbeza. 🎜int x = 1; int y = 2; swap(x, y); // 互换 x 和 y 的值 cout << x << " " << y << endl; // 输出:2 1
Pair
untuk mencipta objek Pair
yang menyimpan kunci integer dan nilai rentetan: 🎜rrreee🎜🎜Templat fungsi: 🎜Buat pertukaran swap
untuk menukar dua integer: 🎜rrreeeAtas ialah kandungan terperinci Apakah perbezaan antara templat kelas dan templat fungsi untuk fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!