|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
[C++] Scope e visibilità di una variabile
Salve,
credevo che lo scope o la visibilità di una variabile fossero la stessa cosa ma il libro che sto leggendo attribuisce due significati differenti ma non riesco a capire. Portata o scope : è l'ambiente (blocco, funzione, modulo o programma completo) ove resta definita una variabile Visibilità : è la proprietà secondo la quale, all'interno del proprio campo di validità, il nome della variabile è visibil, cioè può essere usato. Che diavolo di differenza c'è ? non capisco |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
es in java: Codice:
public class Prova { private String stringa = null; public Prova(String stringa) { stringa = "sono il campo stringa della classe Prova o il parametro del costruttore?"; } } non so se mi sono spiegato ![]() ps. ah ora ho letto che riguarda c++.. dovrebbe essere la stessa cosa comunque Ultima modifica di k0nt3 : 21-05-2007 alle 11:26. |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Quote:
Codice:
Modulo C extern T s(); extern T z; static T f(); static T y; main() { int x=1; } T f() { static int w=3; T* a = new T ; ... ... delete a; } Modulo S T z = valore iniziale; T s(...) { ... } la variabile z ha portata nell'intero programma e visibilità nei moduli C e S la variabile y ha portata nell'intero programma e visibilità nel solo modulo C la variabile w ha portata nella funzione f() e visibilità in f() Non riesco a capire ancora la differenza tra visibilità e funzione |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
![]() per la variabile z invece è chiaro.. è dichiarata extern in C e poi definita anche in S |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
La cosa strana è che ho sempre assunto lo scope di una variabile come la sua visibilità...
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
ecco googlando ho trovato qualcosa http://www.na.drr.cnr.it/depietro/FUNZIONI_new.pdf
leggi da pag 26! è esattamente ciò che ho detto inizialmente.. l'esempio del tuo libro è un pò oscuro.. tipo alla slide 28 dovresti capire tutto ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
ne approfitto intanto per un'ulteriore delucidazione : l'allocazione dinamica di un tipo T mediante il puntatore a.
Quando lo spazio di memoria puntato da a viene allocato nella funzione f() e questa termina senza il "delete a;" il contenuto di a resta cmq in memoria giusto ? Ciò che si perde è solo il suo puntatore giusto ? |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
si se non usi delete la memoria resta allocata, ma perdendo il puntatore non hai più modo di andarla ripescare (è un errore piuttosto comune quando si fanno grossi programmi in c++ o c).
per l'esempio del tuo libro invece credo di aver capito... la variabile y è static e questo comporta che il suo valore viene conservato durante tutta l'esecuzione del programma, anche se ti trovi nel modulo S, solo che è visibile solo quando sei nel modulo C. in pratica nel modulo S la variabile c'è ancora (perchè il suo valore deve essere conservato) ma non è raggiungibile. |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
ma di che libro si tratta?
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Da c++ a uml di carlo savy
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:38.