Meninjau Kembali Template Fungsi dan Class
Tulis fungsi dan class generik dengan sintaks template yang tepat
Meninjau Kembali Template Fungsi dan Class adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Mengapa Templat?
Templat memungkinkan Anda menulis kode sekali, lalu meminta kompiler membuat versi khusus untuk setiap tipe yang digunakan. Templat merupakan dasar penting pemrograman generik.
Sintaks Templat Fungsi
Deklarasikan parameter tipe dengan template <typename T>. Gunakan T dalam tanda tangan fungsi.
template <typename T>
T max_of(T a, T b) {
return (a > b) ? a : b;
}
std::cout << max_of(3, 7); // int
std::cout << max_of(2.5, 1.5); // doubletypename vs class
Kata kunci typename dan class dapat dipertukarkan dalam deklarasi parameter templat. typename lebih umum digunakan dalam gaya modern.
Beberapa Parameter Tipe
Templat dapat memiliki beberapa parameter tipe.
template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
return a + b;
}Parameter Non-Tipe
Parameter templat juga dapat berupa nilai non-tipe: bilangan bulat, enumerasi, dan penunjuk.
template <typename T, size_t N>
struct StaticArray {
T data[N];
};
StaticArray<int, 10> arr;Templat Kelas
Kelas generik menggunakan sintaks templat yang sama. Gunakan parameter tipe untuk anggota dan metode.
template <typename T>
class Stack {
std::vector<T> data_;
public:
void push(T x) { data_.push_back(std::move(x)); }
T pop() { T t = std::move(data_.back()); data_.pop_back(); return t; }
};
Stack<int> s1;
Stack<std::string> s2;Fungsi Anggota di Luar Kelas
Definisi di luar kelas memerlukan awalan templat pada setiap anggota.
template <typename T>
class Stack {
public:
void push(T x);
};
template <typename T>
void Stack<T>::push(T x) {
data_.push_back(std::move(x));
}Argumen Templat Bawaan
Seperti argumen fungsi bawaan. Argumen ini digunakan ketika pemanggil tidak menentukannya.
template <typename T = int>
class Box {
T value;
};
Box<> b; // T is intDeduksi Argumen Templat
Kompiler sering kali menyimpulkan argumen templat dari pemanggilan.
template <typename T>
void print(T x) { std::cout << x; }
print(42); // T deduced as int
print("hello"); // T deduced as const char*
print<double>(3); // explicitDeduksi Argumen Templat Kelas (C++17)
C++17 memungkinkan Anda menghilangkan argumen templat kelas jika argumen tersebut dapat disimpulkan dari konstruktor.
std::pair p(1, 2.5); // pair<int, double>
std::vector v{1, 2, 3}; // vector<int>Pencarian Dua Fase
Templat menjalani pencarian dalam dua fase — saat definisi (nama non-dependen) dan saat instansiasi (nama dependen). Hal ini mendeteksi banyak kesalahan pada waktu definisi.
Pesan Kesalahan
Kesalahan templat dapat terasa menakutkan. Bacalah dari bawah ke atas, fokuskan perhatian pada lokasi sumber, dan gunakan konsep C++20 untuk meningkatkan diagnostik.
Pemeriksaan Singkat
Fitur apa yang memungkinkan std::vector v{1, 2, 3}; dikompilasi tanpa menentukan std::vector<int>?
Ringkasan
Templat membuat kode khusus tipe pada waktu kompilasi. Definisikan templat fungsi dan kelas dengan template <typename T>. Kompiler melakukan deduksi argumen jika memungkinkan — tentukan argumen secara eksplisit jika diperlukan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Meninjau Kembali Template Fungsi dan Class” gratis?
Ya — teks lengkap “Meninjau Kembali Template Fungsi dan Class” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Meninjau Kembali Template Fungsi dan Class”?
Tulis fungsi dan class generik dengan sintaks template yang tepat Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Meninjau Kembali Template Fungsi dan Class” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Meninjau Kembali Template Fungsi dan Class
- Spesialisasi Template Parsial dan Penuh
- Template Variadik dan Paket Parameter
- Fungsi constexpr dan if constexpr