Я пытаюсь создать матричный класс 2×2 в C ++ и хочу инициализировать матрицу идентичной матрицей через конструктор по умолчанию. Мой класс это:
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)
{ }
Я понимаю, что это где-то простая ошибка, но я не могу ее найти, есть идеи?
Вы можете использовать агрегат массива:
class Matrix2x2 {
public:
Matrix2x2() : n({{3,1},{4,7}}) {
}
void setVal(int row, int col, double newVal);
private:
double n[2][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×2 в C ++ и хочу инициализировать матрицу идентичной матрицей через конструктор по умолчанию.
//constructor (inside class)
Matrix2x2()
{
n[0][0] = 1.0;
n[1][1] = 1.0;
n[0][1] = 0;
n[1][0] = 0;
}
или как это
Matrix2x2::Matrix2x2()
{
setVal(0,0,1);
setVal(0,1,1);
setVal(1,0,1);
setVal(1,1,1);
}