Operator Overloading

Dalam Bahasa C++, operator umumnya tidak punya fungsi khusus untuk object. Kegunaan operator untuk object bisa ditentukan saat deklarasi class. Contoh object yang menggunakan operator untuk kegunaan tertentu misalnya string yang menggunakan tanda "+" untuk melakukan penggabungan dua string.

Penambahan fungsi operator untuk objek disebut dengan operator overloading. Untuk melakukan operator overloading, kalian perlu keyword operator dan satu class baru. Sintaks class untuk operator overloading bisa kalian lihat di bawah ini.

class className {
    ... .. ... 
    public tipe_kembalian operator simbol_operator (argument) { 
        ... .. ...
    } 
    ... .. ... 
};

Operator dalam bahasa C++ terdiri dari operator unary dan binary. Class tersebut mewakili operand pertama jika kalian menggunakannya pada operator binary. Operator overloading untuk operator unary (yang punya satu operand) punya sedikit perbedaan dengan operator binary (yang punya dua operand).

Overloading Operator Unary

Operator unary misalnya, increment(++) dan decrement(--). Untuk melakukan overload operator unary, kalian bisa membuat program seperti di bawah ini.

#include <iostream>

using namespace std;

class Hitung {
   private:
    int nilai;

   public:

    // Iniliasi nilai
    Hitung() : nilai(7) {}


    // versi prefiks
    void operator -- () {
        nilai-=3;
    }


    // Versi postfix
    void operator -- (int) {
        nilai-=2;
    }

    void tampilkan() {
        cout << "Hasil: " << nilai << endl;
    }
};

int main() {
    Hitung operatorku;

    cout << "operatorku--" << endl;
    operatorku--;
    operatorku.tampilkan();

    --operatorku;

    cout << "--operatorku" << endl;
    operatorku.tampilkan();
    return 0;
}
Output :
operatorku--
Hasil: 5
--operatorku
Hasil: 2

Contoh di atas menggunakan dua method dengan keyword operator untuk melakukan operator overloading. Beda dua method tersebut ada di parameternya. Itu dibutuhkan untuk operator unary yang punya versi prefix dan postfix seperti operator decrement (--) dan increment(++).

Saat operator digunakan, salah satu method tersebut akan dipanggil. Kalian bisa mengetahui operator mana yang dipanggil dengan melihat hasilnya.

Overloading untuk Operator Binary

Untuk operator binary, overloading dilakukan seperti saat menggunakan operator postfix. Bedanya, parameternya perlu nama. Parameter tersebut digunakan untuk mewakili operand kedua.

#include <iostream>

using namespace std;

class Hitung {
   private:
    int nilai;

   public:

    // Iniliasi nilai
    Hitung(int x){
    	nilai=x;
    }


    // overloading
    Hitung operator * (Hitung operand) {
        return (nilai*operand.nilai+2);
    }

    void tampilkan() {
        cout << "Hasil: " << nilai << endl;
    }
};

int main() {
    Hitung operand1(3), operand2(2);

    operand1=operand1*operand2;
    operand1.tampilkan();

    return 0;
}
Output :
Hasil: 8

Pengecualian untuk Operator Overloading

Operator penugasan (=) dan beberapa operator lain sudah diberi operator overloading oleh C++. Jadi, kalian umumnya tidak akan perlu menambahkan overloading untuk tanda sama dengan (=), kecuali kalian ingin mengubah fungsinya. 

Tidak semua operator bisa menerima operator overloading. Operator-operator tersebut bisa kalian lihat di bawah ini.
  • :: (scope resolution)
  • . (member selection)
  • .* (member selection through pointer to function)
  • ?: (ternary operator)