eşdeğer basit bir üye değişkenler C
aynı değerini ++ bu da eşitliğin olarak adlandırılır ve genellikle operator==()
kullanılarak gerçekleştirilir olduğu anlamına gelir.
MyType A;
MyType B;
if (A == B) {
// do stuff
}
Ve ==
çağrıyı tanımlayacağınız özel fonksiyonu vardır: Eğer operatörler anlamını geçersiz kılabilir C++, yazmak mümkündür. Eşitliği, aynı nesne (yani aynı adres) anlamına gelen kimlikten ayırmak istediğinizi düşünüyorum. Senin durumunda
bool T::operator ==(const T& b) const;
bool operator ==(const T& a, const T& b);
Eğer temel sınıf için operator==
uygulamak istiyoruz ve sonra ne yaptığını gerçekleştirin:
Sen üyesi fonksiyonu ya da (wikipedia itibaren) serbest fonksiyonu olarak bunu uygulayabilirsiniz.
Daha somut olarak, bu şekilde görünecektir:
class MyBase
{
virtual ~MyBase(); // reminder on virtual destructor for RTTI
// ...
private:
virtual bool is_equal(const MyBase& other);
friend bool operator ==(const MyBase& a, const MyBase& b);
// ...
};
bool operator ==(const MyBase& a, const MyBase& b)
{
// RTTI check
if (typeid(a) != typeid(b))
return false;
// Invoke is_equal on derived types
return a.is_equal(b);
}
class D1 : MyBase
{
virtual bool is_equal(const Base& other)
{
const D1& other_derived = dynamic_cast<const D1&>(other);
// Now compare *this to other_derived
}
};
class D2 : MyBase;
{ };
D1 d1; D2 d2;
bool equal = d1 == d2; // will call your operator and return false since
// RTTI will say the types are different
eşdeğer nesneler Size göre sen? –
Türetilen sınıfların çoğunda, eşdeğer, üye değişkenlerinin hepsinin aynı değeri ifade ettiği anlamına gelir. – RandomBits
Bu soru ilgili olabilir: http://stackoverflow.com/questions/1691007/whats-the-right-way-to-overload-operator-for-a-class-hierarchy –