Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    ma non si può dichiarare il costruttore della classe madre come virtual in modo che appena si dichiara il vettore di oggetti_classe_madre, il compilatore sa già che si tratta di un oggetto delle classi figlie?

    perchè però non è ammesso farlo?

    grazie mille a entrambi per le risposte
    Ultima modifica di maluz1; 31-10-2013 a 15:10

  2. #2
    Quote Originariamente inviata da maluz1 Visualizza il messaggio
    ma non si può dichiarare il costruttore della classe madre come virtual in modo che appena si dichiara il vettore di oggetti_classe_madre, il compilatore sa già che si tratta di un oggetto delle classi figlie?
    ... mi sa che hai molta confusione rispetto a cosa faccia virtual...

    Un costruttore virtual non ha senso, quando costruisci l'oggetto sai per forza già a compile-time di che tipo è... poi se vuoi creare un vettore di soli classi figlie nessuno te lo impedisce, ma ovviamente a quel punto ci puoi memorizzare solo quelle. Se però vuoi memorizzare oggetti di vario tipo (della stessa gerarchia di classi), devi necessariamente usare un vettore di puntatori alla classe base, essenzialmente per un motivo molto semplice: un vettore di oggetti (e non di puntatori) presuppone che tutti gli oggetti abbiano le stesse dimensioni, cosa che in generale è garantita solo per oggetti dello stesso tipo, per cui, per poter riferirsi ad oggetti di tipo diverso, si deve necessariamente passare per i puntatori.

    In generale comunque il "tipo vero" di un oggetto al momento di utilizzarlo non ti deve importare, e per questo dynamic_cast, typeid e compagnia dovrebbero essere usati il meno possibile; normalmente quando si progetta una gerarchia di classi si fa in modo che si possa agire sugli oggetti in maniera generica tramite metodi virtuali definiti nella classe base, e poi reimplementati nelle classi figlie in maniera adeguata. A questo punto di rado diventa necessario fare un cast del puntatore alla classe base al "tipo vero" dell'oggetto, visto che si lavora direttamente invocando le funzioni virtuali.
    Ultima modifica di MItaly; 31-10-2013 a 17:17
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.