Tengo problemas con la herencia de operator =. ¿Por qué este código no funciona y cuál es la mejor manera de solucionarlo?Problema con la herencia del operador = en 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;
}
Cuando dice que lo ocultará, estoy bastante seguro de que el operador de asignación predeterminado asignará la parte "A" utilizando la sobrecarga del usuario. Sin embargo, no le permite asignar nada que derive de una A, que es la razón por la cual el código de OP no se puede compilar. – CashCow
@CashCow: Sí, tienes razón. La forma correcta de expresarlo es que el nombre del operador 'heredado' 'se vuelve invisible para * búsqueda de nombre no calificado *. El compilador, por supuesto, todavía sabe acerca de ese operador y todavía lo usa en otros contextos. – AnT