简体   繁体   中英

c++ class constructor for array

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.

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 .

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

等等。

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.

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM