Dalam tutorial ini, kenaikan ++ dan penurunan – operator kelebihan beban dengan cara terbaik, yaitu, meningkatkan nilai anggota data dengan 1 jika operator ++ beroperasi pada objek dan mengurangi nilai anggota data dengan 1 jika – operator digunakan.
Contoh 1: Awalan ++ Penambahan Operator Berlebihan 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;
}
Keluaran
i=0 i=1
Awalnya saat objek obj dinyatakan, nilai anggota data saya untuk objek obj adalah 0 (konstruktor menginisialisasi saya ke 0).
Ketika ++ operator dioperasikan obj, fungsi operator void operator++( )
dipanggil yang meningkatkan nilai anggota data saya ke 1.
Program ini tidak lengkap dalam arti bahwa, Anda tidak dapat menggunakan kode:
obj1 = ++obj;
Itu karena jenis pengembalian fungsi operator dalam program di atas tidak berlaku.
Berikut ini sedikit modifikasi dari program di atas sehingga Anda dapat menggunakan kode obj1 = ++obj
.
Contoh 2: Awalan Penambahan ++ operator kelebihan dengan tipe kembali
#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 yang di atas.
Satu-satunya perbedaan adalah bahwa, tipe pengembalian fungsi operator adalah Memeriksa dalam hal ini yang memungkinkan untuk menggunakan kedua kode ++obj;
obj1 = ++obj;
. Ini karena, temp dikembalikan dari fungsi operator disimpan dalam objek obj.
Karena, tipe pengembalian fungsi operator adalah Memeriksa, Anda juga dapat menetapkan nilai obj ke objek lain.
Perhatikan bahwa, = (operator penugasan) tidak perlu kelebihan beban karena operator ini sudah kelebihan beban di pustaka C ++.
Contoh 3: Penambahan Postfix ++ Operator Overloading
Overloading dari operator increment hingga saat ini hanya benar jika digunakan dalam bentuk awalan.
Ini adalah modifikasi dari program di atas untuk membuat 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 <
Keluaran
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
Ketika operator kenaikan kelebihan beban dalam bentuk awalan; Check operator ++ ()
dipanggil tetapi, ketika operator kenaikan kelebihan beban dalam bentuk postfix; Check operator ++ (int)
dipanggil.
Perhatikan, itu int dalam braket. Ini int memberikan informasi kepada kompiler bahwa itu adalah versi postfix dari operator.
Jangan bingung ini int tidak menunjukkan bilangan bulat.
Contoh 4: Overloading Operator Penurunan - Operator
Operator penurunan dapat kelebihan beban dengan cara yang sama seperti operator kenaikan.
#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 <
Keluaran
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Juga, operator unary seperti:!, ~ Etc dapat kelebihan beban dengan cara yang sama.