I am writing a Matrix2D class. At the beginning I was using constructor as folows,
My code:
Matrix2D(float a,float b, float c,float d)
{
a_=a;
....
}
However, I have just realized that it would be a lot better if I could use multi dimensional array [2][2]. That's where the problem lies,
How do I write constructor for 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
}
}
Just to let you know, I don't ask for a complete code. I just need someone to put me on a right track.
-
2BTW, the class name and constructor name need to match.Ben Voigt– Ben Voigt2012年10月01日 19:40:11 +00:00Commented Oct 1, 2012 at 19:40
-
thx, its just typo, they match in a source codeTomas– Tomas2012年10月02日 07:12:50 +00:00Commented Oct 2, 2012 at 7:12
5 Answers 5
For C++11 you can do:
Matrix(float a,float b,float c, float d) :
matrix{{a,b},{c,d}}
{
}
There's no clean alternative for C++03.
3 Comments
matrix{{a,b},{c,d}} because it's an array.matrix[0][0] = a; // initialize one element
and so on.
1 Comment
matrix[0][0] = value you want to matrix [n][n] = value you want but count up in a loop so the matrix can be dynamic in size or you can reuse your code later.
for(int ii(0); ii < first dimension size; ++ii)
{
for(int ll(0); ii < second dimension size; ++ll)
{
matrix[ii][ll] = value you want;
}
}
this will make your code more extensible and more useful outside of this application and maybe it's not useful or maybe it is.
Comments
If it will be a matrix 2X2, then you can pass a float array and then loop through it.
for example
for(int x = 0;x<4;x++)
{
matrix[0][x] = myarray[x];
}
7 Comments
matrix is declared as float matrix[2][2] then matrix[0][3] is obviously invalid.array[y][x] is the same as array[0][x+y*width]?a[i] is the same as *(a + i) for built-in types?Luchian's version is best if you have a C++11 compiler. Here's one that works for all versions of 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))
{
}
};
The optimizer will inline away the helper.