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;
}
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;
}
Hasil: 8
Pengecualian untuk Operator Overloading
- :: (scope resolution)
- . (member selection)
- .* (member selection through pointer to function)
- ?: (ternary operator)