3

C++ で 2x2 行列クラスを作成しようとしており、既定のコンストラクターを使用して行列を単位行列に初期化したいと考えています。私のクラスは:

class Matrix2x2
{
public:
    Matrix2x2();
    void setVal(int row, int col, double newVal);

private:
    double n[2][2];
};

void Matrix2x2::setVal(int row, int col, double newVal)
{
n[row][col] = newVal;
}

私はいくつかの異なるコンストラクターを試しましたが、どれも私が望むことをしません。

Matrix2x2::Matrix2x2(): setVal(0,0,1), setVal(0,1,0), setVal(1,0,0), setVal(1,1,1)
{  }  

 Matrix2x2::Matrix2x2(): n[0][0](1), n[0][1](0), n[1][0](0), n[1][1](1)
{  }  

おそらくどこかの単純な間違いだと思いますが、それが見つからないようです。何かアイデアはありますか?

4

4 に答える 4

2

C ++ 11の場合:

Matrix2x2::Matrix2x2(): n{{1,0},{0,1}} {}

従来、初期化子リストで配列を初期化することはできなかったため、過去に行き詰まった場合は、コンストラクター本体で値を割り当てる必要があります。

Matrix2x2::Matrix2x2()
{
    n[0][0] = 1;  // or setVal(0,0,1) if you prefer
    n[0][1] = 0;
    n[1][0] = 0;
    n[1][1] = 1;
}
于 2013-02-27T17:02:17.427 に答える
2

配列集約を使用できます。

class Matrix2x2 {
public:
    Matrix2x2() : n({{3,1},{4,7}}) {
    }
    void setVal(int row, int col, double newVal);
private:
    double n[2][2];
};

ideone のデモ。

于 2013-02-27T17:00:33.190 に答える
1

C++ で 2x2 行列クラスを作成しようとしており、既定のコンストラクターを使用して行列を単位行列に初期化したいと考えています。

//constructor (inside class)
Matrix2x2()
{
    n[0][0] = 1.0;
    n[1][1] = 1.0;
    n[0][1] = 0;
    n[1][0] = 0;

}
于 2013-02-27T16:59:30.883 に答える
0

またはこのように

Matrix2x2::Matrix2x2()
{  
    setVal(0,0,1);
    setVal(0,1,1);
    setVal(1,0,1);
    setVal(1,1,1);
}
于 2013-02-27T17:01:54.497 に答える