C++ Academy · Pelajaran

Operator Subskrip dan Panggilan Fungsi

Lebihkan beban [] dan () supaya jenis berkelakuan seperti bekas atau objek boleh dipanggil.

Pelajaran 3 daripada 413 langkah

Operator Subskrip dan Panggilan Fungsi ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 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.

operator[] — Akses Berindeks

Bebankan lebih [] supaya jenis anda boleh digunakan seperti tatasusunan. Ini berguna untuk bekas, matriks dan kelas imej.

class Vec {
    std::vector<double> data_;
public:
    double& operator[](size_t i) { return data_[i]; }
    double  operator[](size_t i) const { return data_[i]; }
};

Dua Pembebanan Lebih: const dan bukan const

Sediakan kedua-duanya. Panggilan pada tika const akan menggunakan pembebanan lebih const; tika bukan const membenarkan tugasan.

Pemeriksaan Sempadan

Secara konvensional, operator[] biasa tidak memeriksa sempadan. Sediakan kaedah at() berasingan yang melontarkan pengecualian — seperti pustaka standard.

double& at(size_t i) {
    if (i >= data_.size()) throw std::out_of_range("");
    return data_[i];
}

Subskrip Berbilang Dimensi (C++23)

C++23 menambahkan subskrip yang dipisahkan koma: m[i, j]. Versi terdahulu memerlukan panggilan fungsi atau subskrip berantai.

// C++23
double& operator[](size_t i, size_t j);

// Pre-C++23 workaround
double& operator()(size_t i, size_t j);

operator() — Panggilan Fungsi

Bebankan lebih () supaya tika boleh dipanggil. Ia digunakan untuk funktor, pengindeksan matriks dan predikat yang boleh dikonfigurasi.

struct Square {
    int operator()(int x) const { return x * x; }
};

Square sq;
std::cout << sq(5);   // 25

Funktor dengan Keadaan

Operator panggilan fungsi boleh berfungsi dengan pemboleh ubah ahli — menghasilkan pemanggil yang mempunyai keadaan.

struct GreaterThan {
    int threshold;
    bool operator()(int x) const { return x > threshold; }
};

GreaterThan over10{10};
std::cout << over10(15);   // true

Gunakan dengan Algoritma STL

Luluskan tika funktor kepada algoritma sebagai ganti fungsi.

std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});

Operator dengan Berbilang Argumen

Kedua-dua [] (sebelum C++23) dan () boleh dibebankan lebih dengan sebarang bilangan argumen. Sebelum C++23, () ialah pilihan yang lebih fleksibel untuk akses seperti matriks.

Memulangkan Rujukan berbanding Nilai

Pulangkan rujukan untuk membolehkan tugasan melalui subskrip. Pulangkan nilai untuk jenis baca sahaja.

Objek Proksi

Jika operator[] perlu memulangkan objek kompleks (seperti medan bit), pulangkan kelas proksi kecil dengan operator penukaran dan tugasan.

Contoh Dunia Sebenar

Penggunaan biasa:

  • std::vector::operator[]
  • std::map::operator[] — menyisipkan kunci yang tiada
  • Kelas matriks: m(i, j)
  • Funktor untuk algoritma

Semakan Pantas

Bagaimanakah anda menjadikan tika sesuatu kelas boleh dipanggil seperti fungsi?

Imbas Kembali

Bebankan lebih [] untuk akses berindeks (sediakan pembebanan lebih const dan bukan const). Bebankan lebih () supaya tika boleh dipanggil — asas kepada funktor dan lambda.

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 “Operator Subskrip dan Panggilan Fungsi” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Operator Subskrip dan Panggilan Fungsi”, 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 “Operator Subskrip dan Panggilan Fungsi”?

Lebihkan beban [] dan () supaya jenis berkelakuan seperti bekas atau objek boleh dipanggil. 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 3 daripada 4.

Berapa lamakah pelajaran “Operator Subskrip dan Panggilan Fungsi” 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. Operator Aritmetik dan Perbandingan
  2. Operator Penyisipan dan Pengekstrakan Strim
  3. Operator Subskrip dan Panggilan Fungsi
  4. Operator Perbandingan Tiga Hala C++20
← Kembali ke C++ Academy