tengo código como este:C++ ¿Cómo es que no puedo asignar una clase base a una clase para niños?
class Base
{
public:
void operator = (const Base& base_)
{
}
};
class Child : public Base
{
public:
};
void func()
{
const Base base;
Child child;
child = base;
}
Mi pregunta es: desde niño se deriva de Base (por lo tanto, debe heredar operador de Base =), ¿cómo es que cuando se ejecuta la instrucción
child = base;
, me conseguir un error del compilador de esta manera:
>.\main.cpp(78) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const Base' (or there is no acceptable conversion)
1> .\main.cpp(69): could be 'Child &Child::operator =(const Child &)'
1> while trying to match the argument list '(Child, const Base)'
el comportamiento que quiero es para la clase de niño a reconocer que está siendo asignado una clase base, y justo "automáticamente" llama al operador de su padre =.
Una vez que he añadido el código a la clase infantil
void operator = (const Base& base_)
{
Base::operator=(base_);
}
entonces todo compilado bien. Aunque no creo que esto sea bueno porque si tengo como 5 clases diferentes que heredan de Base, entonces tengo que repetir el mismo código en cada clase derivada.
NOTA: Mi intención para copiar el Base
a Child
es simplemente copiando los miembros que son comunes tanto Base
y Child
(que sería todos los miembros de Base
). Incluso después de leer todas las respuestas a continuación, realmente no veo por qué C++ no permite que uno lo haga, especialmente si hay un operator=
explícito definido en la clase Base
.
Parece que se está perdiendo los conceptos básicos del polimorfismo. –
Un gato es un animal pero un animal no es necesariamente un gato. – jason
Mi intención era simplemente copiar los miembros que son comunes entre las clases Base y Child. – sivabudh