• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto problema operatore new e ereditarietà classi

oxtiy

Nuovo utente
Autore del topic
10 Agosto 2014
11
0
Miglior risposta
0
Ciao a tutti premetto che sono nuovo del forum, volevo chiedere agli esperti programmatori, come mai posso fare un assegnazione del genere:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
ora chiedo quando assegno al puntatore punt =new sprova, sprova è una altro tipo quindi secondo me il compilatore dovrebbe segnalare l'errore, invece non è così.
Potreste spiegarmi questa cosa?
Grazie in anticipo.
 
@oxtiy

sprova non è un altro tipo , eredita prova(che è un fattore importantissimo) , quindi significa che tutti le variabili d'istanza e i metodi presenti in prova sono disponibile anche in sprova.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

non è sbagliato , una superclasse può far sempre riferimento a un'istanza di sottoclasse, con la differenza che i metodi/variabili d'istanza dichiarati in sprova non sono disponibile anche nell'oggetto prova.

esempio punt non può utilizzare a di sprova.

Per esempio se sprova conteneva un metodo chiamato test , come avevi instanziato punt appunto di tipo sprova (ma con riferimento a un tipo prova ) non potevi accedere a quel metodo.
Comunque l'ereditarietà è alla base delle gerarchie di classi.
 
Il problema è quasi risolto non ho capito il meccanismo alla base, la questione mi sembra abbastanza fittizia.
Quando a punt assegno un puntatore che punta all'oggetto sprova grazie a new, il puntatore prova punt punta ad un puntatore sprova, il fatto che non capisco è a quali dati punta ora il puntatore punt. Dato che sprova contiene tutte le variabili, queste ultime dovrebbero essere accedibili da punt.
Se non sono stato chiaro riformulerò la domanda.
 
@oxtiy

riguardo all'accesso punt può accedere esclusivamente alle variabili d'istanza a e b (definite in prova in quanto c non esiste) .
ti faccio un esempio :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

il metodo set è presente in tutte e due le classi e nella classe B viene ridefinito. Ora chiamando punt->set(); chiamerà il set Riferito alla classe A. quindi quando viene chiamato il costruttore di B() restituisce un riferimento di tipo B, ma dato che viene assegnato ad un oggetto A( superclasse di B) è come se puntasse ai dati di A.
 
Ok grazie mille per la comprensione ho capito.
 
@oxtiy
quindi si può considerare risolto ?
n.b se hai altre domande chiedi pure