6 votes

Constructeur de classe c++ pour un tableau

Je suis en train d'écrire un Matrix2D classe. Au début, j'utilisais le constructeur comme suit,

Mon code :

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

Cependant, je viens de me rendre compte que ce serait beaucoup mieux si je pouvais utiliser le système multidimensionnel. array [2][2] . C'est là que réside le problème, Comment écrire un constructeur pour un tableau ?

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

Juste pour que vous sachiez, je ne demande pas un code complet. J'ai juste besoin de quelqu'un pour me mettre sur la bonne voie.

4voto

Luchian Grigore Points 136646

Pour C++11 vous pouvez faire :

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

Il n'y a pas d'alternative propre pour C++03 .

2voto

Pete Becker Points 27371
matrix[0][0] = a; // initialize one element

et ainsi de suite.

1voto

iruel Points 11

Matrix[0][0] = valeur que vous voulez pour matrix [n][n] = valeur que vous voulez mais compter dans une boucle afin que la matrice puisse avoir une taille dynamique ou que vous puissiez réutiliser votre code plus tard.

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

cela rendra votre code plus extensible et plus utile en dehors de cette application et peut-être que ce n'est pas utile ou peut-être que ça l'est.

0voto

S'il s'agit d'une matrice 2X2, vous pouvez passer un tableau de flottants et le parcourir en boucle.

par exemple

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

0voto

Ben Voigt Points 151460

La version de Luchian est la meilleure si vous avez un compilateur C++11. En voici une qui fonctionne pour toutes les versions 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))
    {
    }
};

L'optimiseur supprimera l'aide en ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X