Een Parent
object geretourneerd door waarde kan niet bevatten mogelijk Child
informatie. Je moet met pointers werken, bij voorkeur slimme pointers, zodat je zelf niet hoeft op te ruimen:
#include <memory>
class Factory
{
// ...
public:
static std::unique_ptr<Parent> GetThing()
{
return std::make_unique<Child>();
}
};
int main()
{
std::unique_ptr<Parent> p = Factory::GetThing();
if (Child* c = dynamic_cast<Child*>(p.get()))
{
// do Child specific stuff
}
}
Raadpleeg het onderstaande codefragment:
Child* c = dynamic_cast<Child*>(parentObject);
waar, parentObject
is van het type Parent*
Zorg ervoor dat het "parentObject" daadwerkelijk van het type "Child" is, anders ongedefinieerd gedrag.
Raadpleeg voor meer informatie
Je kunt het niet, echt niet. Uw fabriek heeft een Parent
. geretourneerd object , die is opgebouwd uit de Child
object c
[*]. Het onderliggende deel ervan is al weggesneden, omdat het is teruggekeerd naar de main
functie. Er is geen manier om het te herstellen.
Misschien wil je pointers gebruiken?
[*] Behalve dat, Child c();
een functie declareert, definieert het geen object. Maar dit is niet je echte code, en ik denk dat je echte klasse constructorparameters heeft.