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

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

Я пишу a 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
}
}

Тільки щоб повідомити, я не прошу повного коду. Мені просто потрібен хтось, щоб поставити мене на правильний шлях.

Відповіді:

4 для відповіді № 1

Для C + + 11 Ви можете зробити:

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

Не існує чистої альтернативи для C ++ 03.


2 для відповіді № 2
matrix[0][0] = a; // initialize one element

і так далі.


1 для відповіді № 3

matrix [0] [0] = значення, яке ви хочете матирувати [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;
}
}

це зробить ваш код більш розширеним і кориснішим поза цією програмою, і, можливо, він не корисний, а може і є.


0 для відповіді № 4

Якщо це буде матриця 2X2, то ви можете передати плаваючий масив, а потім провести цикл через нього.

наприклад

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

0 для відповіді № 5

Версія 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))
{
}
};

Оптимізатор виведе помічника.