|
sHADOw001 |
.fedelissimo.
Registered: Jan 2008
Posts: 51 (0.01 al dì)
Location: Milano
Corso: Comunicazione Digitale
Anno:
Time Online: 19:48:09: [...]
Status: Offline
Edit | Report | IP: Logged |
Allora, provo a spiegartelo anche se sono un po' arrugginito su questo genere di esercizio!
a1 = c2 è consentito perchè sia a1 che c2 hanno in comune la superclasse A.Benchè in a1 vi sia un oggetto di tipo B, esso è dichiarato come A.
(Anche se in realtà c2 andrebbe inizializzato altrimenti il compilatore segnala errore)
b = a2 non è consentito perchè b è di tipo B dichiarato come B, quindi benchè esteso da A non ha legami con a2 che contiene un D.
b = a1 è consentito solo con cast perchè b è di tipo B e a1 è di tipo A contente B in questo caso.Essendo B una classe estesa da A, può contenere possibili oggetti A a patto che essi vengano castati come B.
e per ultimo, b = c1 non è consentito perchè B non ha legami con c1 di tipo C con dentro un D.
Il mio consiglio è quello di scriverti al volo le classi A, B, C, D e provare a fare degli assegnamenti.
In linea di massima devi controllare il tipo dei due oggetti: se due oggetti sono dello stesso tipo e contengono oggetti della stessa classe o di una classe estesa, l'assegnamento è valido con o senza cast, a seconda dell'ordine gerarchico in cui avviene l'assegnazione.Se le due classi sono di tipo diverso, come un oggetti B b e un C c (con dentro un D, ad esempio), non è valido perchè non ci sono legami.
Un oggetto di tipo A può contenere un A, un B, un C e un D.
Un oggetto di tipo B può contenere un B o un A castato.
Un oggetto di tipo C puo contenere un C, un A castato, un B castato o un D.
E oggetto di tipo D puo contenere un D, un C castato, un B castato e un A castato.
Spero di esserti stato di aiuto
Last edited by sHADOw001 on 25-01-2009 at 12:21
|