I dati sono stati definiti nella classe derivata salvata durante l'up-casting?

1

Diciamo che ho due classi di classe Oggetto (classe base) e attore (classe derivata). La classe actor usa physics quindi ho bisogno di implementarlo nella classe Actor. Ma ci sono altre classi derivate della classe "Object" che non usano la fisica, quindi non voglio avere implementato la fisica su di esse perché sarebbero dati inutili.

class Object
{
    public:
    Object();
    ~Object();

    virtual void Main();

    private:
    Transform transform;
};

class Actor : public Object
{
    public:
    Actor();
    ~Actor();

    void Main();

    private:
    Physics physics; //Can i make this????
};

Poiché ho implementato solo la fisica nella classe actor, ho bisogno di aggiornarlo in qualche modo alla classe base in questo modo:

int main()
{
    Object* BaseClass = new Actor;
}

I dati "fisici", definiti sull'attore, possono essere sottoposti a upcast anche se non lo si desidera utilizzare esternamente? Non c'è alcun modo in cui posso farcela?

    
posta Andre Marques 07.05.2016 - 18:41
fonte

2 risposte

3

Nel tuo esempio l'istanza Object* BaseClass = new Actor(); ti fornisce un oggetto sul quale tutto quello che sai è che può fare ciò che un'altra istanza di Object può fare.

L'istanza stessa ha tutta la conoscenza di un attore.

Se chiami un metodo su BaseClass (ad esempio un metodo chiamato ToString ()) sarà un Actor.ToString () non un Object.ToString () che chiami.

Se il metodo ToString () di un'istanza attore utilizza qualsiasi informazione specifica per la classe attore che verrebbe utilizzata anche se la chiami solo sapendo che si tratta di un oggetto.

    
risposta data 07.05.2016 - 18:55
fonte
1

Gli oggetti generalmente non partecipano alle up-cast, sia implicite che esplicite.

Per uno, l'upcast è applicato al riferimento all'oggetto, e per un altro, i up-cast sono validati in fase di compilazione quindi non c'è un comportamento di runtime per un up-cast valido (e uno non valido non verrà compilato ).

Ciò significa che quando si accede tramite un riferimento come tipo Object , l'oggetto effettivo è ancora un Actor e avrà tutti i Actor di dati e comportamenti.

    
risposta data 07.05.2016 - 18:54
fonte

Leggi altre domande sui tag