PDA

Visualizza la versione completa : [c++] costruttore crea matrice


Salvatore_91
13-11-2009, 15:18
Salve raga, dovrei fare un semplice esercizio sugli oggetti, che gestisce le matrici.

Ora dovrei realizzare un costruttore, che mi definisca la matrice (cioe' numeri di righe e colonne).

io ho fatto cosi:


class Matr
{
public:
void Matrice (int R,int C)
{
int mat[R][C];
}
};


Fin qui tutto bene, pero poi, negli altri metodi se utilizzo "mat", mi dice che non e' dichiarata

Alex'87
13-11-2009, 15:32
Originariamente inviato da Salvatore_91
Fin qui tutto bene, pero poi, negli altri metodi se utilizzo "mat", mi dice che non e' dichiarata "mat" Ŕ dichiarata all'interno del metodo Matrice, pertanto la sua visibilitÓ Ŕ ridotta a quel metodo.

E comunque il tuo metodo "Matrice" non Ŕ un costruttore: il valore di ritorno non va indicato, neanche void e il nome deve essere lo stesso della classe.

oregon
13-11-2009, 15:33
pero poi, negli altri metodi se utilizzo "mat", mi dice che non e' dichiarata

Ed ha ragione, dato che l'hai dichiarata localmente al costruttore.

Come saprai le variabili locali non esistono fuori dalla funzione in cui sono dichiarate ...

Per fare quello che dice l'esercizio, devi dichiarare un puntatore doppio ad intero privato nella classe e usarlo per allocare dinamicamente la matrice nel costruttore.

Tramite il puntatore, la matrice sarÓ utilizzabile dal resto della classe.

Non dimenticare di scrivere il codice per liberare la memoria nel distruttore.

Salvatore_91
13-11-2009, 15:41
in che senso:
un puntatore doppio ad intero privato nella classe???

oregon
13-11-2009, 15:43
Originariamente inviato da Salvatore_91
in che senso:
un puntatore doppio ad intero privato nella classe???

Non c'e' "un senso" particolare ... :confused:

private:
int **matrice;

Salvatore_91
13-11-2009, 15:54
bho, non ho capito.

Cmq nel costruttore (il puntatore doppio) come lo devo utilizzare?

oregon
13-11-2009, 15:57
Originariamente inviato da Salvatore_91
bho, non ho capito.

Scusa ... cosa non hai capito?

Perche', se non hai capito questa parte, non potrai andare avanti nell'allocazione e ti conviene fare un passo indietro a studiare i puntatori del C ...



Cmq nel costruttore (il puntatore doppio) come lo devo utilizzare?

Allocando la memoria che ti serve.

Scusa, a prescindere dal C++, se lavorassi con il C, come allocheresti dinamicamente una matrice di interi ?


(Con il C++ userai la new per allocare al posto della malloc e la delete per liberare la memoria al posto della free, ma se lo sai fare in C, lo sai fare anche in C++ ...)

Salvatore_91
13-11-2009, 16:01
okok hai ragione, mi stavo perdendo in un bicchier d'acqua.


ecco:


class Matrice
{
private:
int **mat;

public:
int R,C;

Matrice(int R,int C)
{
int mat[R][C];
}
};

Salvatore_91
13-11-2009, 16:13
scusami ancora,
utilizzando il codice scritto sopra.

negli altri metodi, come posso acquisire i valori nella matrice???
io faccio cosi:


for (i=0;i<R;i++)
for (j=0;j<C;j++)
{
cout<<"Inserisci in "<<i+1<<","<<j+1<<" = ";
cin>>mat[i][j];
}


dove R e' il numero di righe
C e' il numero di colonne

compilandolo non mi da nessun erroe di sintassi, ma eseguendolo, appena inserisco un valore e digito invio, mi dice: errore..... segnalazione a windows ecc ecc

oregon
13-11-2009, 16:20
Guarda che il codice che hai scritto non ha senso ...

Non hai allocato dinamicamente la matrice tramite il puntatore e continui ad usare una matrice locale al costruttore (che abbia lo stesso nome non ha alcuna importanza) ...

Cerca nel forum ... ci sono delle discussioni sull'allocazione delle matrici tramite puntatori ...

Loading