Dalam contoh ini, anda akan belajar membebani kenaikan ++ dan penurunan - operator di C ++.
Untuk memahami contoh ini, anda harus mempunyai pengetahuan mengenai topik pengaturcaraan C ++ berikut:
- Kelas dan Objek C ++
- Pembina C ++
- Beban Pengendali C ++
Dalam tutorial ini, kenaikan ++ dan pengurangan - operator kelebihan beban dengan cara terbaik, iaitu, meningkatkan nilai anggota data sebanyak 1 jika operator ++ beroperasi pada objek dan penurunan nilai anggota data sebanyak 1 jika - operator digunakan.
Contoh 1: Beban Pengendali Penambahan Awalan ++ tanpa jenis 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; )
Pengeluaran
i = 0 i = 1
Pada mulanya apabila obj objek dinyatakan, nilai anggota data i untuk objek obj adalah 0 (konstruktor menginisialisasi i hingga 0).
Apabila operator ++ dikendalikan pada obj, fungsi operator void operator++( )
dipanggil yang meningkatkan nilai anggota data i menjadi 1.
Program ini tidak lengkap kerana, anda tidak boleh menggunakan kod:
obj1 = ++ obj;
Ini kerana jenis fungsi pengembalian operator dalam program di atas tidak sah.
Berikut adalah sedikit pengubahsuaian program di atas supaya anda dapat menggunakan kod obj1 = ++obj
.
Contoh 2: Overfix operator Prefix Increment ++ dengan jenis pengembalian
#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; )
Pengeluaran
i = 0 i = 0 i = 1 i = 1
Program ini serupa dengan yang di atas.
Satu-satunya perbezaan ialah, jenis fungsi pengembalian operator adalah Periksa dalam kes ini yang memungkinkan untuk menggunakan kedua-dua kod tersebut ++obj;
obj1 = ++obj;
. Ini kerana, temp yang dikembalikan dari fungsi operator disimpan di obj objek.
Oleh kerana, fungsi operator jenis pengembalian adalah Periksa, anda juga dapat menetapkan nilai obj ke objek lain.
Perhatikan bahawa, = (operator penugasan) tidak perlu berlebihan kerana operator ini sudah terlalu banyak memuatkan perpustakaan C ++.
Contoh 3: Penambahan Postfix ++ Operator berlebihan
Overloading operator kenaikan sehingga tahap ini hanya berlaku jika ia digunakan dalam bentuk awalan.
Ini adalah pengubahsuaian program di atas untuk menjadikan ini berfungsi baik untuk bentuk awalan 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.