Hoe cast ik een bovenliggende klas als de onderliggende klas

Hoe cast ik een bovenliggende klas als de onderliggende klas

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.