Dalam contoh ini, Anda akan belajar membebani operator increment ++ dan decrement - di C ++.
Untuk memahami contoh ini, Anda harus memiliki pengetahuan tentang topik pemrograman C ++ berikut:
- Kelas dan Objek C ++
- Pembuat C ++
- C ++ Operator Overloading
Dalam tutorial ini, increment ++ dan decrements - operator kelebihan beban dengan cara terbaik, yaitu meningkatkan nilai anggota data sebesar 1 jika ++ operator beroperasi pada suatu objek dan menurunkan nilai anggota data sebesar 1 jika - operator digunakan.
Contoh 1: Prefix ++ Increment Operator Overloading tanpa tipe pengembalian
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )
Keluaran
i = 0 i = 1
Awalnya ketika objek objek dideklarasikan, nilai anggota data i untuk objek objek adalah 0 (konstruktor menginisialisasi i hingga 0).
Ketika ++ operator dioperasikan pada obj, fungsi operator void operator++( )
dipanggil yang meningkatkan nilai anggota data i menjadi 1.
Program ini tidak lengkap dalam artian, Anda tidak dapat menggunakan kode:
obj1 = ++ obj;
Hal ini dikarenakan jenis kembalian dari fungsi operator pada program di atas tidak berlaku.
Berikut adalah sedikit modifikasi program di atas agar Anda dapat menggunakan kode obj1 = ++obj
.
Contoh 2: Prefix Increment ++ operator overloading dengan tipe kembalian
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )
Keluaran
i = 0 i = 0 i = 1 i = 1
Program ini mirip dengan program di atas.
Satu-satunya perbedaan adalah, jenis fungsi operator yang dikembalikan adalah Check dalam hal ini yang memungkinkan untuk menggunakan kedua kode ++obj;
obj1 = ++obj;
. Karena, temp yang dikembalikan dari fungsi operator disimpan dalam object obj.
Karena, jenis fungsi operator yang dikembalikan adalah Periksa, Anda juga dapat menetapkan nilai obj ke objek lain.
Perhatikan bahwa, = (assignment operator) tidak perlu di-overload karena operator ini sudah kelebihan beban di library C ++.
Contoh 3: Penambahan Postfix ++ Operator Overloading
Overloading operator increment hingga saat ini hanya berlaku jika digunakan dalam bentuk prefiks.
Ini adalah modifikasi program di atas untuk membuat ini berfungsi baik untuk bentuk prefiks dan bentuk postfix.
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
When increment operator is overloaded in prefix form;
Check operator ++ ()
is called but, when increment operator is overloaded in postfix form; Check operator ++ (int)
is invoked.
Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.
Don't confuse this int doesn't indicate integer.
Example 4: Operator Overloading of Decrement -- Operator
Decrement operator can be overloaded in similar way as increment operator.
#include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Also, unary operators like: !, ~ etc can be overloaded in similar manner.