Apa itu Beban Pengendali?
Dengan menggunakan operator yang berlebihan dalam C ++, anda dapat menentukan lebih dari satu makna bagi operator dalam satu skop. Tujuan overloading operator adalah untuk memberikan makna khas operator untuk jenis data yang ditentukan pengguna.
Dengan bantuan operator yang berlebihan, anda boleh mentakrifkan semula sebahagian besar operator C ++. Anda juga boleh menggunakan operator yang berlebihan untuk melakukan operasi yang berbeza menggunakan satu operator.
Dalam tutorial C ++ ini, anda akan belajar:
- Apa itu Beban Pengendali?
- Sintaks
- Pendekatan yang berbeza untuk Pengendalian yang berlebihan pada C ++
- Bolehkah semua Pengendali C ++ Dibebani?
- Perkara yang Perlu Diingat:
- Peraturan untuk Beban Pengendali:
- Cara Membebankan Pengendali:
Sintaks
Untuk membebani operator C ++, anda harus menentukan fungsi khas di dalam Kelas seperti berikut:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Berikut adalah penjelasan untuk sintaks di atas:
- Type_type adalah jenis pengembalian untuk fungsi.
- Seterusnya, anda menyebutkan kata kunci pengendali.
- Simbol tersebut menandakan simbol pengendali berlebihan. Contohnya, +, -, <, ++.
- Argumen (s) dapat diteruskan ke fungsi operator dengan cara yang sama seperti fungsi.
Contoh 1:
#includeusing namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Termasuk fail header iostream dalam kod kami untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama TestClass.
- Gunakan pengubah akses peribadi, yang menandakan ahli kelas sebagai akses peribadi.
- Buat kiraan pembolehubah integer. Pemboleh ubah ini akan dapat diakses secara peribadi.
- Gunakan pengubah akses awam, yang menandakan ahli kelas sebagai akses peribadi.
- Gunakan pembina kelas untuk memulakan pembilang pemboleh ubah hingga 5.
- Membebankan makna pengendali -.
- Pengendali akan mengurangkan nilai pemboleh ubah x dengan 1.
- Akhir bahagian pembebanan operator. Pengendali telah diberi nama baru.
- Mendefinisikan fungsi bernama fungsi Display ().
- Cetak nilai kiraan pemboleh ubah bersama teks lain di konsol semasa fungsi Paparan () dipanggil. The} menandakan bahagian akhir fungsi Paparan ().
- Akhir badan kelas.
- Panggil fungsi utama (). Logik program harus ditambah dalam fungsi ini.
- Buat contoh kelas TestClass dan beri nama tc.
- Ini akan memanggil fungsi operator void - ().
- Gunakan sikap TestClass Class untuk memanggil fungsi Display ().
- Fungsi mesti mengembalikan nilai setelah berjaya diselesaikan.
- Bahagian akhir fungsi utama ().
Pendekatan yang berbeza untuk Pengendalian yang berlebihan pada C ++
Anda boleh melakukan overloading operator dengan melaksanakan salah satu jenis fungsi berikut:
- Fungsi Ahli
- Fungsi Bukan Ahli
- Fungsi Rakan
- Fungsi pengendali berlebihan mungkin fungsi anggota ketika operan Kiri adalah objek Kelas.
- Apabila operan Kiri berbeza, fungsi Overloading Operator mestilah fungsi bukan anggota.
Anda boleh menjadikan pengendali kelebihan fungsi operator sebagai fungsi rakan jika perlu mengakses ahli kelas peribadi dan dilindungi.
Bolehkah semua Pengendali C ++ Dibebani?
Tidak. Terdapat pengendali C ++ yang tidak dapat kelebihan beban.
Ia merangkumi:
- :: - Operator resolusi Skop
- ?: -pengendali luar.
- . -pemilih ahli
- Saiz operator
- * -pilih penunjuk anggota
Perkara yang Perlu Diingat:
- Dengan beban operator yang berlebihan, anda boleh mentakrifkan semula cara pengendali hanya berfungsi untuk jenis yang ditentukan pengguna (objek, struktur). Anda tidak boleh menggunakannya untuk jenis terbina dalam (float, char, int, dll.).
- Pengendali = dan & C ++ berlebihan secara lalai. Contohnya, anda boleh menyalin objek Kelas yang sama secara langsung menggunakan operator =.
- Keutamaan pengendali tidak mengubah hubungan dan keutamaan pengendali. Walau bagaimanapun, anda boleh mengubah urutan penilaian menggunakan kurungan.
- Terdapat empat pengendali yang anda tidak boleh memuatkan lebih banyak pada C ++. Mereka termasuk pengendali resolusi skop (: :), operator pemilihan anggota (.), Pemilihan anggota melalui pengendali pointer ke fungsi (. *), Dan operator ternary (? :).
Peraturan untuk Beban Pengendali:
Berikut adalah peraturan untuk Beban Operator yang berlebihan:
- Untuk berfungsi, sekurang-kurangnya satu operan mestilah objek kelas yang ditentukan pengguna.
- Anda hanya boleh membebankan operator yang ada. Anda tidak boleh membebankan operator baru.
- Beberapa pengendali tidak boleh berlebihan menggunakan fungsi rakan. Walau bagaimanapun, pengendali seperti itu boleh dibebani dengan menggunakan fungsi anggota.
Cara Membebankan Pengendali:
Contoh 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Termasuk fail header iostream dalam kod kami untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama OperatorOverload.
- Gunakan pengubah akses peribadi, yang menandakan ahli kelas sebagai akses peribadi.
- Buat pemboleh ubah integer x. Pemboleh ubah ini akan dapat diakses secara peribadi.
- Gunakan pengubah akses awam, yang menandakan ahli kelas sebagai akses peribadi.
- Gunakan pembina kelas untuk memulakan pemboleh ubah x hingga 10.
- Lebihkan makna pengendali ++.
- Pengendali akan menambah nilai pemboleh ubah x dengan 2.
- Akhir bahagian pembebanan operator. Pengendali telah diberi nama baru.
- Memanggil fungsi Cetak ().
- Cetak nilai pemboleh ubah x bersama teks lain pada konsol semasa fungsi Cetak () dipanggil.
- Bahagian akhir fungsi Cetak ().
- Akhir badan kelas.
- Panggil fungsi utama (). Logik program harus ditambah dalam fungsi ini.
- Buat contoh Kelas Operator Overload yang bernama ov.
- Ini akan memanggil fungsi void operator ++ ().
- Gunakan sikap kelas Operator Overload untuk memanggil fungsi Print ().
- Fungsi mesti mengembalikan nilai setelah berjaya diselesaikan.
- Bahagian akhir fungsi utama ().
Contoh 2:
#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Termasuk fail header iostream ke dalam program kami untuk menggunakan fungsinya.
- Sertakan ruang nama std ke dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama TestClass. {Menandakan permulaan badan kelas.
- Gunakan pengubah akses peribadi untuk menandakan pemboleh ubah sebagai peribadi, yang bermaksud ia hanya dapat diakses dari dalam Kelas.
- Tentukan dua pemboleh ubah integer, nyata dan lebih.
- Gunakan pengubah akses awam untuk menandakan konstruktor sebagai umum, yang bermaksud bahawa ia dapat diakses walaupun di luar Kelas.
- Membuat pembina kelas dan memulakan pemboleh ubah.
- Memulakan nilai pemboleh ubah nyata.
- Permulaan nilai pemboleh ubah lebih.
- Hujung badan pembina.
- Mengatasi makna pengendali +.
- Buat hasil jenis data dari jenis TestClass.
- Gunakan operator + dengan nombor kompleks. Garis ini akan menambahkan bahagian nyata nombor ke bahagian nyata nombor lain.
- Gunakan operator + dengan nombor kompleks. Garis ini akan menambahkan bahagian khayalan nombor ke bahagian khayalan nombor lain.
- Program ini akan mengembalikan nilai hasil berubah apabila berjaya dilaksanakan.
- Akhir definisi makna baru operator +, iaitu kelebihan beban.
- Panggil kaedah cetak ().
- Cetak nombor kompleks baru selepas penambahan pada konsol.
- Fungsi bahagian akhir cetakan ().
- Akhir badan Kelas TestClass.
- Memanggil fungsi utama ().
- Melewati nilai bahagian nyata dan kompleks yang akan ditambah. Bahagian pertama c1 akan ditambahkan ke bahagian pertama c2, iaitu 9 + 4. Bahagian kedua c1 akan ditambahkan ke bahagian kedua c, iaitu 5 + 3.
- Melakukan operasi menggunakan operator + yang terlalu banyak dan menyimpan hasilnya dalam pemboleh ubah c3.
- Mencetak nilai pemboleh ubah c3 pada konsol.
- Akhir fungsi utama () fungsi.
Ringkasan:
- Anda boleh menentukan lebih daripada satu makna untuk pengendali C ++ dalam satu skop.
- Ini dipanggil pembebanan operator.
- Overload operator memberikan makna khas pengendali untuk jenis data yang ditentukan pengguna.
- Anda boleh mentakrifkan semula sebahagian besar operator C ++ melalui pembebanan operator yang berlebihan.
- Tidak semua operator C ++ boleh berlebihan.
- Agar pengendali kelebihan beban, sekurang-kurangnya salah satu pengendali mestilah objek yang ditentukan pengguna.
- Hanya pengendali yang ada yang boleh berlebihan. Anda tidak boleh membebankan operator baru.