конструктор класса c++ для массива

Я пишу Matrix2D класса. В начале я использовал конструктор как следует,

мой код:

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

тем не менее, я только что понял, что было бы намного лучше, если бы я мог использовать многомерные array [2][2]. Вот в чем проблема., Как написать конструктор для массива ?

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

просто чтобы вы знали, я не прошу полного кода. Мне просто нужен кто-то, кто наставит меня на правильный путь.

5 ответов


на C++11 вы можете сделать:

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

нет чистой альтернативы для C++03.


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

и так далее.


matrix[0][0] = значение, которое вы хотите matrix [n][n] = значение, которое вы хотите, но подсчитываете в цикле таким образом, матрица может быть динамической по размеру или вы можете повторно использовать свой код позже.

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

это сделает ваш код более расширяемым и более полезным вне этого приложения, и, возможно, это не полезно или, возможно, это так.


Если это будет матрица 2X2, то вы можете передать массив float, а затем пройти через него.

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

версия Luchian лучше всего, если у вас есть компилятор C++11. Вот тот, который работает для всех версий 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))
    {
    }
};

оптимизатор встроит помощника.