Newsgroup: it.comp.lang.c++
Titolo: valori di default, dove dichiararlo?

dove bisogna dichiarare un valore di default per un parametro? con il
mio compilatore borland mi permette di farlo sia nel file header (la
dichiarazione) sia nel file cpp (la definizione)... perň non mi
permette di farlo da entrambe le parti (dice che una volta definito
non si puň ridefinire il valore di default)...
dov'č che č piů giusto indicarlo, nella dichiarazione o nella
definizione?
]\/[ad]\/[age
"Un Maestro nell'arte della vita, non fa nessuna precisa distinzione tra lavoro
e gioco, fatica e riposo, mente e corpo, educazione e ricreazione. 
Insegue semplicemente la sua visione di Eccellenza attraverso qualunque cosa sta facendo e lascia agli altri decidere se sta lavorando o giocando. A lui sembra sempre che sta facendo entrambe le cose." - Anonimo.
.-~-.-~-. 
www.madmagelab.cjb.net
 .-~-.-~-.

definizione?
poiché ho scritto MENTRE stava compilando, non mi sono accorto che il
compilatore mi ha dato la risposta: DEVO indicarlo nella
dichiarazione, altrimenti tutti i file che usano quella funzione non
sanno che c'ha un parametro con valore di default... ma allora perché
mi permette di mettere la dichiarazione di default nella definizione?


mi permette di mettere la dichiarazione di default nella definizione?
Perché la funzione non deve per forza essere dichiarata in un .h ma
puoi semplicemente avere:
void foo(int a = 13){}
int main(){
    foo();
    return 0;
}
se invece foo deve essere dichiarata (ad esempio in un header) i
valori di default li devi mettere lì.
-- 
Marco Barisione (ICQ 84277092)

 mi permette di mettere la dichiarazione di default nella definizione?
Perchè la definizione è anche una dichiarazione. L'errore è se le due
dichiarazioni risultanti conflittano. (ovvero nella definizione puoi non
metterlo o metterlo ma se lo metti deve essere lo stesso che avevi messo
in una dichiarazione precedente).
--
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

in una dichiarazione precedente).
Sei sicuro? Mi pare che sia il VC++ che il BCB diano
errore(redefinition of parameter XXX . see declaration of XXXX) se
tenti di impostare i parametri di default sia nel prototipo che nella
definizione, e questo avviene anche se i valori sono identici.
Il Ghenio
-----
These are my parting words to you:
those who give up are doomed!
-----

mi permette di mettere la dichiarazione di default nella definizione?
Io solitamente nel prototipo non indico nemmeno i nomi dei parametri,
lascio tutto nella definizione( tanto é il tipo dei parametri che
conta, non il loro nome) compresi ovviamente eventuali valori di
default. Per esempio...
void qualcosa(int,int,int);
void qualcosa(int a,int b,int c=5)
    {
    blabla=a+b+c;


definizione, e questo avviene anche se i valori sono identici.
Ops.. ho interpretato male la risposta, pensavo che stavi ancora
facendo riferimento ai parametri standard, non ai nomi dei parametri.


     }
Mi sembra di aver capito che metti nel .h
void qualcosa(int, int, int);
e poi nel .cpp
void qualcosa(int a,int b,int c=5)
     {
         blabla=a+b+c;
     }
???
Ma sei sicuro ? Voglio dire:
1) Chi vede solo il tuo .h non sapra' mai in che ordine la funzione vuole i
parametri
    se la funzione fosse :
        void ordina ( int start, int end );
            come fa a sapere se va prima end o start se nell'header non
specifichi i nomi ?
   personalmente se vedo la tua funzione senza nessun nome alle variabili
locali io la interpreto
  cosi': la funzione, qualsia cosa gli passo, non cambia comportamento.
2) Chi usa il solo il .h (e la lib ovviamente) come fa a sapere che la
funzione ha l'ultimo parametro di default ?
Ciao
Gaetano.
-- 
Posted from 
dell-01.mm.eutelsat.org
 [194.214.173.17] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Il Ghenio
Spero che tu programmi da solo, altrimenti i tuoi colleghi ti 
ammazzerebbero... 8-)))
-- 
Luc.

 definizione, e questo avviene anche se i valori sono identici.
Hanno ragione loro e mi sono sbagliato io. Lo devi mettere solo nella
dichiarazione.


 dichiarazione.
Nota: lo puoi anche mettere solo nella definizione, ma così facendo stai
facendo anche una definizione extra. Ovvero:
// file.h
int bar( int, int=4 );
int foo( int, int );
// file.cpp
int bar( int, int )
{
    // codice che vale per l'overload di bar(int,int) e
    // bar(int) che è implementata come bar(int,4)
    // entrambe chiamabili da chiunque includa file.h
}
int foo( int, int=4 )
{
    // codice che vale per foo(int,int)
    // chiamabile da chi include file.h
    // ma anche per foo(int) che è implementata
    // come foo(int,4) ma che è chiamabile solo da
    // file.cpp (e solo da questo punto in poi).


ammazzerebbero... 8-)))
Ti posso assicurare che c'é modo e modo di documentare il proprio
lavoro e di renderlo chiaro ad un eventuale collega che dovrà metterci
le mani in futuro.


funzione ha l'ultimo parametro di default ?
E' un sistema che non uso, perché obbliga ad utilizzare l'eventuale
libreria con lo stesso compilatore con cui é stata scritta(altrimenti
va ricompilata, e per farlo ci vogliono i sorgenti per intero).
E' ovvio che se non indico i nomi dei parametri nel prototipo delle
mie funzioni do per scontato che l'eventuale collega che ci mette le
mani sopra abbia la possibilità di vedere anche i file .cpp


 le mani in futuro.
Il codice deve parlare da solo. Ogni altro metodo è solo un di più. Te lo 
dico per decennale esperienza di lavoro in 'gruppo'...
-- 
Luc.

 parametri? Poche, immagino..
Sempre! Hai mai lavorato con grandi (ed intendo centinaia di cpp) 
progetti?
 
-- 
Luc.

 mani sopra abbia la possibilità di vedere anche i file .cpp
mmmmm. E se poi decidi di farne una libreria ? Ti rimetti li a copiare
i prototipi dal .cpp al .h ?
