Templat Fungsi dan Class Diulangi Semula
Tulis fungsi dan class generik dengan sintaks templat yang betul.
Templat Fungsi dan Class Diulangi Semula ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Mengapa Templat?
Templat membolehkan anda menulis kod sekali dan membolehkan pengompil menjana versi khusus untuk setiap jenis yang digunakan. Ini ialah asas pengaturcaraan generik.
Sintaks Templat Fungsi
Isytiharkan parameter jenis dengan template <typename T>. Gunakan T dalam tandatangan 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 berbanding class
Kata kunci typename dan class boleh saling menggantikan dalam pengisytiharan parameter templat. typename lebih lazim dalam gaya moden.
Berbilang Parameter Jenis
Templat boleh mempunyai berbilang parameter jenis.
template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
return a + b;
}Parameter Bukan Jenis
Parameter templat juga boleh berupa nilai bukan jenis: bilangan bulat, enumerasi dan penuding.
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 jenis untuk ahli dan kaedah.
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 Ahli di Luar Kelas
Takrif di luar kelas memerlukan awalan templat pada setiap ahli.
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 Lalai
Sama seperti argumen fungsi lalai. Digunakan apabila pemanggil tidak menentukannya.
template <typename T = int>
class Box {
T value;
};
Box<> b; // T is intDeduksi Argumen Templat
Pengompil sering membuat deduksi argumen templat daripada panggilan tersebut.
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 membolehkan anda menghilangkan argumen templat kelas apabila argumen tersebut boleh dideduksi daripada pembina.
std::pair p(1, 2.5); // pair<int, double>
std::vector v{1, 2, 3}; // vector<int>Carian Dua Fasa
Templat menjalani carian dalam dua fasa — semasa pengisytiharan (nama tidak bergantung) dan semasa instantiasi (nama bergantung). Ini mengesan banyak ralat pada masa pengisytiharan.
Mesej Ralat
Ralat templat boleh mengelirukan. Baca dari bawah ke atas, tumpukan pada lokasi sumber dan gunakan konsep C++20 untuk memperbaik diagnostik.
Semakan Pantas
Ciri apakah yang membolehkan std::vector v{1, 2, 3}; dikompil tanpa menentukan std::vector<int>?
Imbas Kembali
Templat menjana kod khusus jenis pada masa kompilasi. Takrifkan templat fungsi dan kelas dengan template <typename T>. Pengompil membuat deduksi argumen apabila boleh — nyatakan secara eksplisit apabila perlu.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Templat Fungsi dan Class Diulangi Semula” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Templat Fungsi dan Class Diulangi Semula”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Templat Fungsi dan Class Diulangi Semula”?
Tulis fungsi dan class generik dengan sintaks templat yang betul. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Templat Fungsi dan Class Diulangi Semula” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Templat Fungsi dan Class Diulangi Semula
- Pengkhususan Templat Separa dan Penuh
- Templat Variadik dan Pek Parameter
- Fungsi constexpr dan if constexpr