Ha pasado un tiempo desde que tuve que escribir el código C++ y me siento un poco estúpido.Cómo selecciono una clase padre como clase secundaria
class Parent
{
...
};
class Child : public Parent
{
...
};
class Factory
{
static Parent GetThing() { Child c; return c; }
};
int main()
{
Parent p = Factory::GetThing();
Child c1 = p; // Fails with "Cannot convert 'Parent' to 'Child'"
Child c2 = (Child)p; // Fails with "Could not find a match for 'TCardReadMessage::TCardReadMessage(TCageMessage)'"
}
Sé que esto se supone que es simple, pero no estoy seguro de lo que estoy haciendo mal: código que es similar a, pero no es exactamente, el código de abajo que he escrito.
No entiendo lo que Factory está haciendo. Parece que está devolviendo una variable local. Es ese objeto valido? – John
@John: está devolviendo una copia de un objeto local. La devolución es por valor, por lo que no importa si el original muere después (y por supuesto, sí). No hay nada de malo en eso, aparte de que no es apropiado para una función de fábrica ... –
Sí, el método GetThing en la clase Factory devuelve una variable local. Que aparentemente no hará lo que quiero. Debo usar punteros en su lugar. Al menos según las respuestas a continuación. – Mykroft