Newsgroup: it.comp.lang.delphi
Titolo: Help... oggetti e puntatori...

Ho un po' di confusione sugli oggetti e sulle classi in Delphi...
Partiamo dall'inizio... io parlo correntemente in C++, e Delphi e' un
secondo linguaggio da qualche tempo in qua. Mi piace per l'immediatezza di
certe soluzioni, e lo uso molto piu' del C++, ormai, ma alcune cose mi sono
ancora poco chiare, quindi pongo qualche domanda...
- Se dichiaro una variabile, di tipo MiaClasse, in realta' ho dichiarato un
puntatore? Quindi devo usare il costruttore e il distruttore tutte le volte?
- Se uso il costruttore di default, derivandolo da TObject, anche tutti i
membri della classe saranno creati, oppure sono puntatori a nulla di
definito?
- Se la variabile ha visibilita' locale in un metodo di un'altra classe,
alla fine della procedura viene automaticamente distrutta?
- Se assegno ad una variabile il valore di un'altra, in realta' uso un
costruttore di copia oppure faccio una semplice assegnazione di puntatore?
- Dopo l'operazione precedente, devo evitare di distruggere uno dei 2
oggetti per conservare in vita anche l'altro?
- All'interno del costruttore devo SEMPRE richiamare quello di TObject (o
nel caso di un oggetto visibile, quello della classe base, ad esempio
TForm)? E all'interno del distruttore?
- Qual e' la sintassi per richiamare il metodo (ad esempio costruttore)
della classe base? E qual e' la sintassi per ridefinire il distruttore?
Grazie mille, ma purtroppo ho sempre preso per buone molte cose che invece
al momento mi danno problemi, e vorrei capire fino in fondo. Sarebbe molto
gradito se poteste consigliarmi un libro *completo* che tratti anche questo
argomento. Grazie anche per tutti i suggerimenti che mi avete dato finora...

al momento mi danno problemi, e vorrei capire fino in fondo.
Purtroppo Delphi ha, secondo me, delle gravi incongruenze rispetto al
C++, che invece, da questo punto di vista, č _molto_ piů lineare.
-- 
Andrea Laforgia
#exclude <windows.h>

prevedere l'override del costruttore della classe madre.
Errata Corrige:
"[...]prevedere l'override del distruttore della classe madre.


 #exclude <windows.h>
P.S.: Ma sei un uomo o un'enciclopedia? :-)

il Vi$ual Ba$ic... (io i Variant non li ho mai sopportati)
Questo sicuramente, però Delphi rispetto a C++ ha molte pecche e a
volte crea dei tranelli non indifferenti per chi è alle prime armi. 


 volte crea dei tranelli non indifferenti per chi è alle prime armi.
E soprattutto per chi e' abituato a fare molta distinzione tra l'operatore
'punto' e l'operatore 'freccia'. :-(
Ma scusa, perche' non ho fatto l'imbianchino? Almeno sarebbe stato un lavoro
*deterministico*: prima di passare il pennello la parete e' grigia, dopo che
l'ho passato la parete e' bianca. Nulla di piu', nulla di meno. Se dipingo
un'altra parete questa non modifica la precedente, e non impegna risorse
della successiva... bah...

l'ho passato la parete e' bianca. 
Tutt'altro che deterministico, prendi due pareti grigie, le dipingi
tutte e due di bianco ed è probabile che non siano bianche uguali.


 errore. ...
Una opzione che evita la creazione del form _per nulla_ e' di scrivere
quanto ti serve nel file di progetto o semplicemente di eliminare la
unit della form principale (msg di errore possono essere mostrati con
MessageBox e simili)
Saluti
Paolo Arosio

 uno per uno, nel costruttore.
SkodaOctavia.RuotaDiScorta _e'_ inizializzata a nil.
(attenzione alla parola "inizializzata" che state usando come concetto di
"oggetto istanziato", puo' provocare confusione...)
ciao
carlo

"oggetto istanziato", puo' provocare confusione...)
Niente affatto.  E` l'uso che fai tu di "inizializzato" che è
contrario a quanto si intende comunemente.  Per "inizializzato", in
programmazione, si intende, nella fattispecie per i puntatori, "che
punta a memoria indirizzabile correttamente", NON "che ha un valore
iniziale".  Infatti, ad esempio, in C/C++, si intende comunemente per
"puntatore non inizializzato", un puntatore a cui non viene assegnato
un indirizzo di memoria indirizzabile senza problemi, NON un puntatore
a cui non viene assegnato un valore iniziale.


iniziale".
Andrea, da che mondo e mondo se assegno nil a un
puntatore l'ho inizializzato; nonostante nil non punti
ad un'area di memoria indirizzabile correttamente.
(forse l'uso comune a cui ti riferisci non e' poi cosi'
comune...)
ciao
carlo

puntatore l'ho inizializzato;
No, "puntatore inizializzato" non vuol dire questo.


 No, "puntatore inizializzato" non vuol dire questo.
Sara' un linguaggio improprio, ma:
- Se un puntatore e' una variabile.
- Se una variabile si considera "inizializzata" quando ha un valore noto.
- Allora un puntatore NIL e' inizializzato.
Al limite, nel "mio" linguaggio (improprio, sono d'accordo) posso dire che
non e' stato "allocato". Forse questo mi deriva dal fatto che il compilatore
segnali "variabile non inizializzata" solo quando non ho assegnato un
valore? (anche per una variabile puntatore)

- Se una variabile si considera "inizializzata" quando ha un valore noto.
Nel caso dei puntatori non è così.  
"Inizializzare" un puntatore non ha lo stesso significato di
inizializzare una variabile qualsiasi.  Su questo principio, difatti,
è stata costruita la funzione "Assigned" di Delphi.  Anche "nil" è un
valore che viene assegnato al puntatore, ma Assigned(P) dove P è un
puntatore nil, dà come risultato False.



    Via De Gasperi, 14 - 42019
    Scandiano (Reggio Emilia)

puntatore vale nil
O meglio, di testare se NON vale nil.  Appunto il discorso di sopra.
Assigned non è in grado di riconoscere se il suo argomento è un
"dangling pointer", quindi assume che <> nil voglia dire "assegnato un
valore presumibilmente valido", quindi "presumibilmente
inizializzato".


Andrea,
per quanto possibile sarebbe meglio evitare di postare
le proprie opinioni personali come verita' assolute
(specialmente se queste opinioni sono completamente
sballate).
Ti consiglio un corso di base di programmazione per
capire almeno cosa si intenda, universalmente, per
"inizializzare una variabile" (ivi compresi i puntatori).
ciao
carlo

"inizializzare una variabile" (ivi compresi i puntatori).
Conosco benissimo cosa significa inizializzare una variabile e
altrettanto bene cosa significa inizializzare un puntatore.
Tu, no.  Rileggi i miei messaggi.
-- 
Andrea Laforgia
"God is dead." -- Nietzsche
"Nietzsche is dead." -- God