Panduan Awal untuk Templat C++

Halo kepada semua yang memiliki hasrat untuk menjadi pemrogram! Hari ini, kita akan memulakan perjalanan yang menarik ke atas dunia templat C++. Jangan khawatir jika anda baru untuk pemrograman – saya akan menjadi pemandu yang baik untuk anda, membawa anda melalui setiap langkah dengan banyak contoh dan penjelasan. Jadi, mari kita wujudkan!

C++ Templates

Apakah itu Templat?

Sebelum kita melangkah ke detilnya, mari kita faham apa itu templat dan mengapa ia begitu berguna. Bayangkan anda adalah seorang juru masak (tahanlah dengannya, analogi ini akan membantu segera). Anda memiliki resepi untuk membuat pizza, tetapi anda mahu dapat membuat jenis jenis pizza yang berbeza tanpa menulis resepi baru setiap kali. Itulah yang templat lakukan di C++! Ia membolehkan kita untuk menulis kode yang fleksibel dan dapat digunakan kembali yang boleh bekerja dengan jenis jenis data yang berbeza.

Templat Fungsi

Mari kita mula dengan templat fungsi, jenis yang lebih ringkas dari dua jenis utama templat.

Sintaks Dasar

Berikut adalah cara untuk menulis templat fungsi dasar:

template <typename T>
T add(T a, T b) {
return a + b;
}

Mari kita kongsi ini:

  • template <typename T> memberitahu kompiler bahwa kita membuat templat.
  • T adalah penyandang untuk jenis data apa pun.
  • Yang selebihnya terlihat seperti fungsi biasa, tetapi menggunakan T bukannya jenis khusus.

Menggunakan Templat Fungsi

Sekarang, mari kita lihat cara kita boleh menggunakan templat ini:

int main() {
int result1 = add(5, 3);           // result1 = 8
double result2 = add(3.14, 2.86);  // result2 = 6.0
std::string result3 = add("Hello, ", "World!");  // result3 = "Hello, World!"

std::cout << result1 << std::endl;
std::cout << result2 << std::endl;
std::cout << result3 << std::endl;

return 0;
}

Adakah itu keren? Kita menggunakan fungsi add yang sama untuk integer, double, dan juga strings! Kompiler secara automatik menghasilkan fungsi yang sesuai untuk setiap jenis ketika kita menggunakannya.

Parameter Templat Berbilang

Kita juga boleh menggunakan parameter templat berbilang:

template <typename T, typename U>
T multiply(T a, U b) {
return a * b;
}

int main() {
int result1 = multiply(5, 3);      // result1 = 15
double result2 = multiply(3.14, 2);  // result2 = 6.28

std::cout << result1 << std::endl;
std::cout << result2 << std::endl;

return 0;
}

Di sini, T dan U boleh adalah jenis yang berbeza, memberikan kita lebih banyak fleksibiliti.

Templat Kelas

Sekarang bahwa kita telah menguasai templat fungsi, mari kita naikkan level dengan templat kelas.

Sintaks Dasar

Berikut adalah templat kelas yang ringkas:

template <typename T>
class Box {
private:
T content;
public:
Box(T item) : content(item) {}
T getContent() { return content; }
};

Kelas Box ini boleh menyimpan jenis item yang berbeza!

Menggunakan Templat Kelas

Mari kita gunakan Box kita:

int main() {
Box<int> intBox(42);
Box<std::string> stringBox("Hello, Templates!");

std::cout << intBox.getContent() << std::endl;     // Outputs: 42
std::cout << stringBox.getContent() << std::endl;  // Outputs: Hello, Templates!

return 0;
}

Kami telah membuat rak yang boleh menyimpan integer dan strings. Bayangkan peluangnya!

Spesialisasi Templat

Kadang-kadang, kita mungkin mahu templat bertindak berbeza untuk jenis khusus. Itulah di mana spesialisasi templat masuk:

template <typename T>
class DataPrinter {
public:
void print(T data) {
std::cout << "Data generik: " << data << std::endl;
}
};

template <>
class DataPrinter<bool> {
public:
void print(bool data) {
std::cout << "Nilai Boolean: " << (data ? "benar" : "palsu") << std::endl;
}
};

int main() {
DataPrinter<int> intPrinter;
DataPrinter<bool> boolPrinter;

intPrinter.print(42);   // Outputs: Data generik: 42
boolPrinter.print(true);  // Outputs: Nilai Boolean: benar

return 0;
}

Di sini, kita telah memberikan perlakuan khas kepada nilai boolean di atas kelas DataPrinter.

Penutup

Tahniah! Anda baru saja mengambil langkah pertama ke atas dunia kuat templat C++. Kita telah menyinggah templat fungsi, templat kelas, dan juga menyentuh tentang spesialisasi templat. Ingat, latihan membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini.

Berikut adalah rakaman singkat atas metode templat yang kita telah cuba:

Method Keterangan
Templat Fungsi Membuat fungsi generik yang boleh bekerja dengan jenis data berbilang
Templat Kelas Membuat kelas generik yang boleh bekerja dengan jenis data berbilang
Parameter Templat Berbilang Membolehkan templat untuk menggunakan lebih daripada satu jenis generik
Spesialisasi Templat Memberikan implementasi khusus untuk jenis data tertentu

Templat mungkin kelihatan agak abstrak pada awalnya, tetapi mereka adalah alat yang sangat kuat yang boleh membuat kod anda lebih fleksibel dan dapat digunakan kembali. Teruskan untuk mengkod, teruskan untuk belajar, dan sebelum anda tahu, anda akan menjadi pakar templating!

Credits: Image by storyset