2012-10-01 20 views
6

Sto scrivendo una classe Matrix2D. All'inizio usavo costruttore come folows,costruttore di classe C++ per array

Il mio codice:

Matrix2D(float a,float b, float c,float d) 
{ 
    a_=a; 
    .... 
} 

Tuttavia, ho appena realizzato che sarebbe stato molto meglio se potevo usare multidimensionale array [2][2]. Ecco dove si trova il problema, Come si scrive costruttore per array?

class Matrix 
{ 
    float matrix[2][2]; 
    public: 
    Matrix2D(float a,float b,float c, float d) 
    { 
     matrix[2][2]={a,b,c,d} // not valid 
    } 
} 

Giusto per farvi sapere, non chiedo un codice completo. Ho solo bisogno di qualcuno che mi metta sulla giusta rotta.

+2

BTW, il nome della classe e il nome del costruttore devono corrispondere. –

+0

thx, il suo solo errore di battitura, corrispondono a un codice sorgente – Tomas

risposta

4

Per C++ 11 si può fare:

Matrix(float a,float b,float c, float d) : 
    matrix{{a,b},{c,d}} 
{ 
} 

Non c'è alternativa pulita per C++ 03.

+0

Hai bisogno di togliere le parentesi, cioè 'matrice {{a, b}, {c, d} } 'perché è un array –

+0

@JesseGood http://ideone.com/9PQNK –

+0

@JesseGood sei sicuro? –

2
matrix[0][0] = a; // initialize one element 

e così via.

+0

Thx per la risposta. Questo è il modo in cui lo farò – Tomas

0

Se si tratta di una matrice 2X2, è possibile passare un array float e quindi eseguirne il ciclo.

ad esempio

for(int x = 0;x<4;x++) 
{ 
    matrix[0][x] = myarray[x]; 
} 
+0

@LuchianGrigore come è valido? –

+0

@coolbartek Se 'matrix' è dichiarato come' float matrix [2] [2] 'then' matrix [0] [3] 'ovviamente non è valido. –

+0

sembra a posto per me, un array bidimensionale è in realtà un array normale, in cui è possibile accedere agli elementi di [0] [x]. Un array [x] [y] è uguale a un array [0] [x * y] –

0

La versione di Luchian è la migliore se si dispone di un compilatore C++ 11. Ecco uno che funziona per tutte le versioni di C++:

struct matrix_holder { float matrix[2][2]; }; 

class Matrix : matrix_holder 
{ 
    static matrix_holder pack(float a,float b,float c, float d) 
    { 
     matrix_holder h = { {{a, b}, {c, d}} }; 
     return h; 
    } 

public: 
    Matrix(float a,float b,float c, float d) : matrix_holder(pack(a,b,c,d)) 
    { 
    } 
}; 

L'ottimizzatore in linea l'assistente.

1

matrice [0] [0] = valore che si desidera matrice [n] [n] = valore desiderato ma conteggio in un ciclo in modo che la matrice possa avere dimensioni dinamiche o riutilizzare il codice in un secondo momento.

for(int ii(0); ii < first dimension size; ++ii) 
{ 
    for(int ll(0); ii < second dimension size; ++ll) 
    { 
    matrix[ii][ll] = value you want; 
    } 
} 

questo renderà il codice più estensibile e al di fuori più utile di questa applicazione e forse non è utile o forse lo è.

Problemi correlati