Статический метод создания матрицы использующий внутренний конструктор

Рейтинг: 0Ответов: 1Опубликовано: 05.05.2015

Собственно нужно создать статический метод в классе Matrix, возвращающий мне матрицу (или указатель, не разобрался ещё), который будет использовать конструктор этого класса.

Метод:

static Matrix inicilaze()
{
    printf("Please enter dimensions of matrix\n");
    printf("Input m: ");
    int m;
    std::cin >> m;
    std::cout << "\nInput n: ";
    int n;
    std::cin >> n;
    Matrix mtrx(m, n);
    return mtrx;
}

Конструктор:

Matrix::Matrix(const int m, const int n)
{
    this->M = m;
    this->N = n;
    arr = new int*[m];
    for (int i = 0; i < m; ++i)
    arr[i] = new int[n];
    this->input();
}

Input-метод заполнения этого класса.

После создания и заполнения вывожу его на экран.

auto mtrx = Matrix::inicilaze();
mtrx.print();

Где я ошибся?

Ответы

▲ 1

Для начала, статический метод, конструирующий матрицу — не такая уж и плохая идея. Правда, матрицу не стоит возвращать по значению, т. к. вам придётся для этого уметь копировать её, а это неправильно: матрица может быть большой! Именованный конструктор (так обычно называется эта идиома) должен по идее возвращать указатель:

static Matrix* inicilaze()
{
    // ...
    return new Matrix(m, n);
}

Отмечу, правда, что ваш метод inicilaze не очень хорош. Он занимается вводом данных с клавиатуры, это не та часть логики, которая принадлежит самому классу Matrix. Я бы посоветовал вынести это в отдельную функцию:

Matrix* interactiveInputMatrix()
{
    cout << "Please enter dimensions of matrix" << endl;
    // ...
}