C++ Academy · Pelajaran

Templat Fungsi dan Class Diulangi Semula

Tulis fungsi dan class generik dengan sintaks templat yang betul.

Pelajaran 1 daripada 414 langkah

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);      // double

typename 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 int

Deduksi 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);   // explicit

Deduksi 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.

Percuma untuk bermula

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

  1. Templat Fungsi dan Class Diulangi Semula
  2. Pengkhususan Templat Separa dan Penuh
  3. Templat Variadik dan Pek Parameter
  4. Fungsi constexpr dan if constexpr
← Kembali ke C++ Academy