C++ Class Default Equality Operator
Dalam pemrograman C++, operator kesetaraan (==
) secara default membandingkan alamat memori dua objek. Ini berarti bahwa dua objek yang berbeda, bahkan jika keduanya memiliki nilai yang sama, tidak akan dianggap sama oleh operator ==
default.
Contoh:
#include
class MyObject {
public:
int value;
MyObject(int val) : value(val) {}
};
int main() {
MyObject obj1(5);
MyObject obj2(5);
if (obj1 == obj2) {
std::cout << "Objek 1 dan Objek 2 sama" << std::endl;
} else {
std::cout << "Objek 1 dan Objek 2 tidak sama" << std::endl;
}
return 0;
}
Output dari kode di atas adalah:
Objek 1 dan Objek 2 tidak sama
Ini karena obj1
dan obj2
memiliki alamat memori yang berbeda, meskipun keduanya memiliki nilai value
yang sama.
Mendefinisikan Operator Kesetaraan Kustom
Untuk membandingkan nilai objek dan bukan alamat memori, kita perlu mendefinisikan operator kesetaraan kustom. Hal ini dilakukan dengan overloading operator ==
.
Contoh:
#include
class MyObject {
public:
int value;
MyObject(int val) : value(val) {}
// Overloading operator kesetaraan
bool operator==(const MyObject& other) const {
return this->value == other.value;
}
};
int main() {
MyObject obj1(5);
MyObject obj2(5);
if (obj1 == obj2) {
std::cout << "Objek 1 dan Objek 2 sama" << std::endl;
} else {
std::cout << "Objek 1 dan Objek 2 tidak sama" << std::endl;
}
return 0;
}
Output dari kode di atas adalah:
Objek 1 dan Objek 2 sama
Sekarang, operator ==
membandingkan nilai value
dari kedua objek, dan karena keduanya sama, objek tersebut dianggap sama.
Catatan:
- Operator kesetaraan kustom harus dikembalikan dengan tipe
bool
. - Parameter
other
harus berupa referensi konstan (const
) untuk menghindari salinan objek. - Operator
==
harus didefinisikan sebagaiconst
karena tidak mengubah objek.
Kesimpulan
Operator kesetaraan default dalam C++ membandingkan alamat memori. Untuk membandingkan nilai objek, Anda perlu mendefinisikan operator kesetaraan kustom dengan overloading operator ==
.