Newsgroup: it.comp.lang.c++
Titolo: variabili private ...

Salve! E' da un pochino che studio il C++, ma ho ancora parecchie lacune...
Mi sembra di aver capito che le funz/var dichiarate come private potessero
essere accedute solo dalle funzioni membro della classe oppure da funzioni
friend.
Ecco un breve esempio ;-)
class CNewsGroup{
private:
   int x;
public:
   void Set_x(int n) {x=n;};
   int Get_x() const {return x;};
};
In sostanza essendo x privata posso accedere ad essa solo tramite le due
funzioni Get... e Set... Quindi in main() dopo aver dichiarato CNewsGroup a;
non posso leggere e scrivere x direttamente ma devo utilizzare le due
funzioni.
Questo dovrebbe essere giusto, ma....
Se la funzione Get_x fosse cosi':
int CNewsGroup::Get_x() const
{
   CNewsGroup temp;
  // Per accedere alla x di temp devo
  // usare .Get.. e .Set.. oppure
  // essendo questa una funzione
  // membro posso anche scrivere
  // direttamente .x nonostante
  // non sia propriamente la var
  // *this ???
   temp.x=33;            // ???
   temp.Set_x(33);   // ???
   return x;
}
E' chiaro che cambiare il val di un temporaneo non ha senso, ma era per fare
un esempio.
Il mio compilatore mi accetta entrambe le forme, ma dal mio libro traspare
che la prima non dovrebbe essere valida visto che temp non e' *this ma e'
una altra var: temp.
Chi dei due avra' ragione ?!?
Io spero il mio compilatore, visto che cosi' mi sembra tutto molto piu'
comodo ;-)
Ah, ovviamente da main() se faccio a.x etc... mi da errore, ma questo e'
ovvio !
Ringrazio tutti con la promessa che quando saro' bravo rispondero' anche io
ai vostri quesiti,
Ricky

Chi dei due avra' ragione ?!?
Ha ragione il tuo compilatore. Sicuro che il libro non stia
parlando dei membri dati "protected" invece di "private" ?
In quel caso le cose sono un po' piu' complesse...
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 In quel caso le cose sono un po' piu' complesse...
Occhio a non farti sviare dall'aver appena dato l'altra risposta. In realta' per
la domanda posta non c'e' differenza fra private e protette. Un metodo di una
classe puo' accedere tranquillamente sia alle private che alle protette
dichiarate in quella classe anche su altre istanze della classe.
La complicazione avviene solo ereditando. Le private delle basi non sono
comunque visibili. Le protette delle basi sono visibili, nel contesto della
derivata, solo sull'istanza propria.
Curioso comunque come le due domande (diverse ma apparentemente simili) siano
state postate quasi contemporaneamente ma da persone diverse.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 Chi dei due avra' ragione ?!?
Il compilatore...
In C++ le keyword private, protected e public regolano i diritti di
accesso a livello di classe, non di oggetto. Questo signidica che una
member function
puo` accedere a tutti i membri dato specifici della classe, non solo
di quelli
della specifica istanza su cui e` invocata, ma anche delle altre
istanze della classe.
Paolo
--
Paolo Marotta
Home: 
http://web.tiscalinet.it/paolo_marotta
Master's Level in C++ Certified by Brainbench
http://www.brainbench.com/transcript.jsp?pid=2440649

state postate quasi contemporaneamente ma da persone diverse.
Infatti...
