2012-10-01 15 views
6

Estoy escribiendo una clase Matrix2D. Al principio yo estaba usando el constructor como folows,C++ constructor de la clase de gama

Mi código:

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

Sin embargo, he acabo de dar cuenta de que sería mucho mejor si pudiera utilizar múltiples dimensiones array [2][2]. Ahí es donde reside el problema, ¿Cómo escribo el constructor para la matriz?

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 
    } 
} 

Solo para hacerle saber, no solicito un código completo. Solo necesito que alguien me ponga en el camino correcto.

+2

Por cierto, el nombre de la clase y el nombre del constructor tienen que coincidir. –

+0

thx, es solo un error tipográfico, coinciden en un código fuente – Tomas

Respuesta

4

Para C++ 11 que puede hacer:

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

No hay alternativa limpia para C++ 03.

+0

Es necesario tomar fuera de los paréntesis, es decir, 'matriz {{a, b}, {c, d} } 'porque es una matriz. –

+0

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

+0

@JesseGood ¿estás seguro? –

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

y así sucesivamente.

+0

Thx para la respuesta. Esa es la manera en que lo haré – Tomas

0

Si va a ser un 2X2 matriz, a continuación, se puede pasar una matriz de flotador y luego bucle a través de él.

por ejemplo

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

@LuchianGrigore ¿cómo es eso inválido? –

+0

@coolbartek Si 'matrix' se declara como' float matrix [2] [2] 'entonces' matrix [0] [3] 'obviamente no es válido. –

+0

me parece bien, una matriz bidimensional es en realidad una matriz normal, donde puede acceder a los elementos por [0] [x]. Una matriz [x] [y] es la misma como una matriz [0] [x * y] –

0

versión de Luchian es mejor si tiene un compilador de C++ 11. Aquí hay uno que funciona para todas las versiones de 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)) 
    { 
    } 
}; 

El optimizador alineará el ayudante.

1

matriz [0] [0] = valor que desea matriz [n] [n] = valor que desee pero cuente en un bucle para que la matriz tenga un tamaño dinámico o reutilice su código más adelante.

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

Esto hará que el código sea más extensible y fuera más útil de esta solicitud y tal vez no es útil o tal vez es.

Cuestiones relacionadas