У меня возникают проблемы с наследованием оператора =. Почему этот код не работает, и как лучше всего это исправить?Проблема с наследованием оператора = в C++
#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;
}
Когда вы скажете, что это скроет, я вполне уверен, что оператор присваивания по умолчанию назначит часть «А», используя перегрузку пользователя. Тем не менее, он не позволяет вам назначать что-либо, что происходит от A, поэтому код OP не компилируется. – CashCow
@CashCow: Да, вы правы. Правильный способ сказать, что имя унаследованного 'operator =' становится невидимым для * неквалифицированного поиска имени *. Компилятор, конечно, все еще знает об этом операторе и все еще использует его в других контекстах. – AnT