Newsgroup: it.arti.musica.strumenti.chitarra
Titolo: [STRA OT] help C++

C'è qualcuno che sia pratico di C++?
Ho una definizione di classe come questa:
class Node{
public:
  Node(int aKey):mKey(aKey),mNext(0),mPrev(0){}
public:
  int mKey;
  Node* mNext;
  Node* mPrev;
};
Che significato ha la linea del costruttore?Mi sfugge il significato di
quelle dichiarazioni.. non dovrebbero essere tra le graffe?

Paolo Caforio ha scritto:

mi sa che hai sbagliato "leggermente" NG..

 mi sa che hai sbagliato "leggermente" NG..
Lo saccio! Ma dato che sul NG di C++ nessuno mi risponde e dato che questo è 
l' NG dove scrivo abitualmente ho pensato di chiedere anche a voi.
So che c'è qualche ingegnere qua....
Scusami per il disturbo e viva la minore armonica!

Paolo Caforio ha scritto:

mai sentito parlare di it.comp.lang.c++ ? :p
cmq se la memoria non m'inganna tutto quello contenuto tra ':' e '{' e` 
la lista di inizializzazione, in pratica quei tre attributi (mi pare si 
chiamino cosi`) saranno inizializzati ai valori racchiusi tra '(' e ')' 
non appena dichiarerai un oggetto node... ovvero ad esempio, se dichiari:
Node a(1);
hai creato un oggetto Node che ha:
a.mKey = 1;
a.mNext = null;
a.mPrev = null;
pija tutto col beneficio del dubbio che e` qualche anno che non tocco il 
c++ :p
-- 
Chuck Norris fuma toscani. Vivi.
Jimi Hendrix suonava la chitarra coi denti. Anche Chuck Norris suona la
chitarra coi denti. Di Jimi Hendrix.
Dopo aver visto la cassetta di The Ring a Chuck Norris non squilla il 
telefono, gli arriva una ricarica da 95 euro
Chuck Norris ha trovato l'ago nel pagliaio e ora lo usa per spaccare in 
4 il pelo nell'uovo.

 a.mPrev = null;
Infatti... era quello che immginavo...
Grazie mille!
Ciao 

 Grazie mille!
prego :p Sempre se la memoria non m'inganna, quell'esempio li e` 
corretto dal punto di vista formale, ma scorretto dal punto di vista 
"filosofico", perche` in pratica rende puttlici tutti gli attributi 
della classe, mentre un programmatore saggio li lascerebbe privati, e 
userebbe metodi pubblici per accedere a quei dati.


 userebbe metodi pubblici per accedere a quei dati.
Caspita Wondy, ma sei pure programmatore?
E' proprio vero che il metal e l'informatica vanno a braccetto... :-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Caspita Wondy, ma sei pure programmatore?
lol, in realta` ormai non lo tocco piu` da qualche anno, pero` ho pure 
fatto un corso tempo fa... anche se non si puo` dire che avessi studiato 
a fondo il c++, ad es la libreria standard non l'avevo approfondita; e` 
un argomento troppo vasto da esaurirsi con un solo corso, e di certo e` 
molto piu` che un semplice "c con le classi" coem tentava di spacciare 
il prof all'uni... praticamente e` come dire che l'elettrica e` una 
classica con le corde di metallo :Ğ


 wrote in message 
news:aKqYf.66215$A83.1...@twister1.libero.it...

E' un modo veloce di inizializzare le variabili all'interno dell'header,
in questo caso mKey, mNext e mPrev saranno inizializzati cosi:
mKey = aKey
mNext=0
mPrev=0 

Bravo wondy. 

 wrote in message 
news:aKqYf.66215$A83.1...@twister1.libero.it...

C'e' una differenza fondamentale che non puo' essere ignorata.
: dataMember(value),
si chiama lista di inizializzazione e :
 1)   Node(int aKey):mKey(aKey),mNext(0),mPrev(0){}
e
2)   Node(int aKey)
      {mKey=aKey; mNext=0;mPrev=0;}
so manco parenti alla lontana.
Nel secondo caso aKey viene creato sulla stack e poi copiato a &mKey.
Nel caso di una lista di inizializzazione aKey e' copiato direttamente a 
&mKey e nessun oggetto temporaneo viene creato.
In pratica nel tuo esempio i compilatori moderni sono abbastanza 
intelligenti da far si che 1 == 2  IN QUESTO CASO SOLO ! e 1 si limita solo 
ad essere buona pratica.
Se tu avessi avuto:
class Node{
public:
Node(int aKey, Leave aPreviousLeave, Leave aNextLeave) : 
mKey(aKey),mNext(aPreviousLeave),mPrev(aNextLeave){}
public:
int mKey;
Leave mNext;
Leave mPrev;
};
Dove Leave e' un oggetto di dimensioni > sizeof(int) la differenza si sente 
pesantemente poiche' nel caso:
1) Viene invocato solo il costruttore di copia per ogni parametro
2) Viene allocato lo spazio sulla stack, invocato il costruttore di default 
e poi l'operatore di assegnamento per ogni parametro 


In quel esempio li va bene cosi'.
Per il semplice motivo che ad ogni membro dato puo' essere assegnato ogni 
valore quindi provvedere un getter and setter non serve a niente e degrada 
le performance, semplicemente e' desiderabile nascondere (sia in lettura che 
scrittura) i puntatori, quindi se sono nodi di un albero io nasconderei 
interamente l'implementazione della classe dichiarandola embedded dentro la 
class Tree.