在类默认构造函数中初始化2x2矩阵

时间:2013-02-27 16:52:46

标签: c++ class matrix default-constructor

我正在尝试在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 个答案:

答案 0 :(得分:2)

您可以使用数组聚合:

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

Demo on ideone.

答案 1 :(得分: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;
}

答案 2 :(得分: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;

}

答案 3 :(得分:0)

或者像这样

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