Инициализация массива объектов

255
19 мая 2017, 16:49

Инициализация массива объектов (C++)

Здравствуйте, уважаемое сообщество. Столкнулся с ситуацией, требующей Вашего пояснения.

Имеется примитивный класс Vector, в котором реализованы все нужные для проекта операции/методы (по условию проекта использовать std::vector запрещено).

Ниже представлена часть класса:

class Vector {
  private:
    double *mem;
    int count;
  public:
    Vector();
    explicit Vector(int count);
    Vector(int count, double filler);
    Vector(const Vector& vec);
    ~Vector();
  ................
}

Имеется класс Matrix, часть представлена ниже:

class Matrix {
  private:
    int rowsNum;
    int columnsNum;
    Vector *rows;
  public:
    Matrix();
    Matrix(int rowsNum, int columnsNum);
    Matrix(int rowsNum, int columnsNum, double filler);
    Matrix(const Matrix& matr);
    ~Matrix();
  ...............
}

Конструктор-инициализатор, принимающий два параметра, реализован следующим образом:

Matrix::Matrix(int rowsNum, int columnsNum) 
{
  this->rowsNum = rowsNum;
  this->columnsNum = columnsNum;
  rows = new Vector[rowsNum];
  for (int i = 0; i < rowsNum; i++)
    rows[i] = Vector(columnsNum);
}

Собственно, интересует следующая строка кода:

rows[i] = Vector(columnsNum);

Дело в том, что все вышеописанное отрабатывает прекрасно без каких бы то ни было ошибок. Меня интересует вопрос, можно ли так вообще делать. Разумеется, можно написать метод класса Vector, работа которого была бы аналогичной тому, что делает конструктор этого класса. Но, опять же, если вышеприведенный код полностью "легален", то в этом нет никакой необходимости.

Хотелось бы услышать Ваши комментарии по этому поводу.

P.S. Операция присваивания векторов в классе Vector перегружена.

Answer 1

Ну, скажем так, я бы добавил перемещающее присваивание для пущей эффективности, только и всего. Ну, может, переписал бы так:

Matrix::Matrix(int rowsNum, int columnsNum) 
:rowsNum(rowsNum),columnsNum(columnsNum),
rows(new Vector[rowsNum])
{
    for (int i = 0; i < rowsNum; i++)
        rows[i] = Vector(columnsNum);
}
READ ALSO
Измерение разниц в секундах между двумя значениями времени

Измерение разниц в секундах между двумя значениями времени

Нужно замерить время работы программы, используются объекты класса

241
Помогите перевести код с Pascal на C++ [требует правки]

Помогите перевести код с Pascal на C++ [требует правки]

Задача: Генерирование всех k-элементных подмножеств множества {1,

198
ignore case for JavaScript

ignore case for JavaScript

Давая ответ на заданный кодом вопрос пользователь не должен беспокоиться о регистре

236
FormData Vuejs input type file

FormData Vuejs input type file

Ребята как можно с помощью FormData отправить одним запросом несколько input type file причем с разными name

285