व्युत्पन्न वर्ग से ज्यादातर के लिए, बराबर का अर्थ है कि सदस्य चर सभी एक ही मूल्य
C++ में इस 'समानता' कहा जाता है और आम तौर पर operator==()
का उपयोग कर कार्यान्वित किया जाता है।
MyType A;
MyType B;
if (A == B) {
// do stuff
}
और ==
कॉल आपके द्वारा निर्धारित एक कस्टम समारोह है: सी ++ आप ऑपरेटरों के अर्थ ओवरराइड कर सकते हैं के लिए, यह लिखने के लिए संभव है।
मुझे लगता है कि आप पहचान से समानता को अलग करना चाहते हैं जिसका अर्थ एक ही वस्तु (यानी एक ही पता) होगा।
आप सदस्य समारोह या मुक्त समारोह (विकिपीडिया से) के रूप में इसे लागू कर सकते हैं:
bool T::operator ==(const T& b) const;
bool operator ==(const T& a, const T& b);
अपने मामले में आप आधार वर्ग के लिए operator==
लागू करना चाहते हैं, और उसके बाद प्रदर्शन करते हैं कि आप क्या कर रहे हैं।
अधिक वस्तुतः यह इस तरह दिखेगा:
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
स्रोत
2012-02-15 04:21:14
आप के अनुसार बराबर वस्तुओं रहे हैं क्या? –
व्युत्पन्न कक्षाओं में से अधिकांश के लिए, समतुल्य का मतलब है कि सदस्य सभी समान मानों को चर करता है। – RandomBits
यह प्रश्न संबंधित हो सकता है: http://stackoverflow.com/questions/1691007/whats-the-right-way-to-overload-operator-for-a-class-hierarchy –