Newsgroup: it.comp.lang.c++
Titolo: DUBBIO su accessibilità delle variabili private di una stessa classe

Salve a tutti,
ho il seguente problema.
Supponiamo che io crei una classe, ad esempio myclass, che abbia per membro
privato la variabile int x ed abbia un metodo pubblico void myf (myclass &
obj). E' noto che nel metodo posso usare x=obj.x
Se ho istanziato 2 oggetti di myclass quali my1 e my2 e chiamo il metodo con
my1.myf(my2), come mai il metodo dell'oggetto my1 può accedere alla
variabile privata my2.x quando my1 e my2 sono oggetti della stessa classe?
Sapete indicarmi un libro che tratti approfonditamente di questo tipo di
questione?
Grazie a chi leggerà il mio messaggio.
Ciao.

 questione?
Stroustrup le spiega esaurientemente, mi pare; ma, se non sbaglio,
anche Eckel, nel suo testo gratuitamente scaricabile.  Sono le basi
del C++.
Se ti interessano i *perche`*, sempre Stroustrup, "Design and
Evolution of the C++ Programming Language", Addison-Wesley
(non credo ne esista una traduzione italiana).
Alex

questione?
Qualsiasi testo di C++, anche se effettivamente spesso su questo
implicitamente si sorvola.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

 --------
Grazie della risposta.
Io sono una principiante; leggo qualcosa del C++ da 2 settimane.
Per me, quello sopra descritto era un "problema". Io voglio capire sempre il
perchč delle cose.
Non mi interessa imparare a memoria.
A presto :-)
P.S. Ogni tanto, per sdrammatizzare, "sorridi" un po'. Quel << E' un
problema?>> della tua risposta sembrava cosě severo.....
By

 --------------------------------------------------
Grazie davvero della risposta. E' stata molto chiara.
E' da poco che studio il C++ ed ho tanti dubbi!
Visto che sei stato così disponibile, ti espongo un ulteriore dubbio (ora mi
manderai a quel paese
:-)))))))
Secondo te, quali sono i motivi perchè il meccanismo di accessibilità sia
legato alle classi e non agli oggetti?
Come avrai capito, sono una curiosona!
Grazie tante del tempo che mi hai dedicato.
Ciao ciao.
Buon lavoro!!!!!!!

 legato alle classi e non agli oggetti?
Lo scopo del meccanismo di accessibilita` e` garantirsi
contro eventuali BUG che causino modifiche indesiderate
allo stato di un oggetto: se lo stato e` interamente
codificato in variabili private, il codice che puo`
averlo modificato si riassume nei soli metodi dell'oggetto
e friend.
NON e` un generale meccanismo di protezione, SOLO una
piccola precauzione contro "bug sconosciuti".
Visto che tutte le istanze di una data classe condividono
identico codice per i metodi e friend, non vi sarebbe
NESSUN vantaggio nell'impedire a quel codice, in certe
circostanze, di accedere a quello stato; vi sarebbero
invece molti costi, sia di comodita` sia di prestazioni.
Quindi, con molti costi a fronte di zero vantaggi,
ovviamente l'ipotesi non e` stata perseguita.
Alex

 problema?>> della tua risposta sembrava così severo.....
Non essendovi nessun dramma, non vi e` nessuna ragione per
sdrammatizzare.  Come sdrammatizzare un dramma che non e`
un dramma senza prima drammatizzarlo?
Se studi un poco le molte migliaia di post che ho fatto a
questo ed altri gruppi nel corso degli anni (
www.deja.com
,
funzione "power search", con me come autore) troverai tanti
esempi del mio peculiare sense of humour in azione (poi non
dire che non ti avevo avvertito...).  A volte ci sono anche
gli smilie, altre volte no.  Caveat lector.
Alex

un altro motivo: spesso hai a che fare con oggetti che contengono puntatori ad
oggetti dello stesso tipo (nodi di albero, nodi di liste, per non parlare di
pattern vari...).
Un altro motivo: gli operatori standard di copia e inizializzazione da oggetto
avrebbero qualche problemino a funzionare...
Quando me ne vengono in mete altri li posto :)
 (smile!)
Ciao,
            Guido

 esempi del mio peculiare sense of humour in azione [...]
In particolare, suggerirei di fare una ricerca specificando le parole
chiave "martelli basi acidi".
M

Buon lavoro!!!!!!!
Anche a te.
Ciao,


 Buon lavoro!!!!!!!
Perche' i linguaggi di programmazione sono fatti per aiutare i
programmatori a non fare pasticci. I meccanismi di accessibilita'
servono a separare gli aspetti di una classe su cui chi la usa puo'
contare, da quelli che sono solo caratteristiche interne.
Una protezione a livello di oggetti sarebbe come impedire ad un
PROGRAMMA di non fare pasticci: questo e' piuttosto inutile, poiche' il
programma fa solo cio' che il programmatore vi ha codificato dentro.
Ciao,
Nicola