Newsgroup: it.comp.lang.c++
Titolo: PARAMETRI ALLE FUNZIONI

Vi pongo il seguente quesito:
supponiamo di voler progettare una funzioncina adatta che deve lavorare con
una matrice:
     void stampa_matrice( "come si mette il parametro matrice di interi?")
voglio dire, un vettore di interi puň essere passato in questo modo:
     void stampa_vettore( int vet[ ] );
allora mi aspettavo di poter passare una matrice cosě:
    void stampa_matrice( int mat[ ][ ] );
e il mio compilatore mi ha praticamente riso in faccia, sapete come devo
fare?
luca

 wrote :
| Vi pongo il seguente quesito:
|
| supponiamo di voler progettare una funzioncina adatta che deve lavorare
con
| una matrice:
|
|      void stampa_matrice( "come si mette il parametro matrice di
interi?")
1 - passa a std::vector
2 - se proprio devi,
    void stampa_matrice( int** mat)

fare?
Il tuo compilatore ha fatto bene, cosi' impari ;)
In C scrivere :
void stampa_vettore( int vet[] ) ;
equivale a scrivere :
void stampa_vettore( int *vet ) ;
*SOLO* in questo caso, l'equivalenza tra array e puntatori e' TOTALE.
Chiaramente, non ha senso scrivere int mat[][] come argomento di una
funzione, in quanto non stai offrendo abbastanza informazioni al
compilatore per capire quanto e' grande questa struttura dati.
Soluzione : devi fornirgli almeno una dimensione.
Supponendo che la matrice sia un vettore di X vettori da Y elementi,
puoi scrivere :
void stampa_vettore( int vet[X][Y] ) ;
Puoi anche non conoscere con esattezza X, ma e' indispensabile che tu
conosca Y, quindi potresti anche scrivere :
void stampa_vettore( int vet[][Y] ) ;
Oppure tagli la testa al toro ed utilizzi :
void stampa_vettore( int *vet[] ) ;
che equivale a 
void stampa_vettore( int **vet ) ;
Ma sei soggetto a regole diverse per l'allocazione di memoria.

grazie a tutti per la cortesia, misento un pirla su questo NG


Hei, ragazzi, usiamo il C++ o il C? Non usiamo la OOP?
Allora ti crei una classe "matrice" con un metodo "print" (o meglio,
ridefinisci l'operatore "<<" ).

 ridefinisci l'operatore "<<" ).
anche tu hai ragione, il fatto č che sto studiando su un libro,allora mentre
procedo, incontro degli esercizi semplici da fare da solo, le classi si
iniziano a fare dopo aver preso confidenza con alcune cose, tipo: istruzioni
di controllo,
funzioni, overload di operatori...e cosě via...
ciao ;-)

 funzioni, overload di operatori...e cosě via...
OK, OK, sono sicuro di quello che dici, e fai benissimo a voler imparare il
C++, partendo dall'inizio ovviamente.
Il fatto č che in molti sono convinti di star programmando ad oggetti solo
perchč usano un compilatore C++ o perchč usano la libreria <iostream>!!!
In futuro non fare l'errore che fanno in molti: non limitarti ad imparare la
"sintassi" del C++, ma cerca di imparare anche *quali* classi fare e con
quali *relazioni*. (v. ad esempio i Design Patterns)
Ciao
Daniele.

 Cosa sono i Design Patterns?
 
http://hillside.net/patterns/patterns.html
 
http://www.acm.org/sigada/wg/patterns/patterns/index.html
 
http://www.cs.wustl.edu/~schmidt/patterns.html

 Daniele.
Cosa sono i Design Patterns?
Ciao
Luca

> Cosa sono i Design Patterns?
Il termine č stato coniato dalla GoF (Gang of Four, Gamma, Vlisside, Helm,
Jhonson) nel loro libro "Design Patterns".
Sostanzialmente i Design Patterns sono problemi+relative soluzioni
*ricorrenti* nella progettazione del software ad oggetti.
Sono utili non solo se un tuo problema ricade tra quelli trattati dal libro,
ma anche in quanto ti mostra come dovrebbero interagire tra loro gli oggetti
in un progetto ben fatto.
Insomma: insieme agli articoli di Carlo Pescio (
www.eptacom.net
) ti dą un
insieme di buoni consigli sulla progettazione/implementazione di sw in C++.
Ciao
Daniele.