में मुझे ऑपरेटर = की विरासत में परेशानी हो रही है। यह कोड क्यों काम नहीं करता है, और इसे ठीक करने का सबसे अच्छा तरीका क्या है?ऑपरेटर की विरासत के साथ समस्या = सी ++
#include <iostream>
class A
{
public:
A & operator=(const A & a)
{
x = a.x;
return *this;
}
bool operator==(const A & a)
{
return x == a.x;
}
virtual int get() = 0; // Abstract
protected:
int x;
};
class B : public A
{
public:
B(int x)
{
this->x = x;
}
int get()
{
return x;
}
};
class C : public A
{
public:
C(int x)
{
this->x = x;
}
int get()
{
return x;
}
};
int main()
{
B b(3);
C c(7);
printf("B: %d C: %d B==C: %d\n", b.get(), c.get(), b==c);
b = c; // compile error
// error: no match for 'operator= in 'b = c'
// note: candidates are B& B::operator=(const B&)
printf("B: %d C: %d B==C: %d\n", b.get(), c.get(), b==c);
return 0;
}
जब आप कहते हैं कि यह इसे छिपाएगा, तो मुझे पूरा यकीन है कि डिफ़ॉल्ट असाइनमेंट ऑपरेटर उपयोगकर्ता अधिभार का उपयोग करके "ए" भाग असाइन करेगा। हालांकि यह आपको ए से प्राप्त कुछ भी असाइन करने की अनुमति नहीं देता है, यही कारण है कि ओपी का कोड संकलित करने में विफल रहता है। – CashCow
@CashCow: हाँ, आप सही हैं। इसे रखने का सही तरीका यह है कि विरासत 'ऑपरेटर =' का नाम * अयोग्य नाम लुकअप * के लिए अदृश्य हो जाता है। संकलक, ज़ाहिर है, अभी भी उस ऑपरेटर के बारे में जानता है और अभी भी इसे अन्य संदर्भों में उपयोग करता है। – AnT