Форум программистов, компьютерный форум CyberForum.ru

Конструктор - C++

Восстановить пароль Регистрация
 
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
25.10.2012, 21:57     Конструктор #1
Помогите написать конструкторы для класса матрицы
для инициализации квадратной матрицы заданного размера с заданными компонентами;
для инициализации прямоугольной матрицы заданных размеров с заданными компонентами;
По идее надо использовать макросы va_start, va_list и va_end. Только я не очень понимаю. как это сделать.
Элементы в матрице типа double
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 21:57     Конструктор
Посмотрите здесь:

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) C++
C++ Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
C++ Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
Конструктор инициализации, конструктор копирования, деструктор C++
C++ Конструктор производного класса требует конструктор предка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 22:45     Конструктор #2
а какие поля есть у этого класса? чего инициализировать то будем?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
25.10.2012, 22:47     Конструктор #3
Что значит "с заданными компонентами"? Элементы матрицы должны задаваться в конструкторе? Если так, то параметры конструктора: ширина, высота, указатель на массив с данными. Ну я бы так делал.
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
26.10.2012, 07:35  [ТС]     Конструктор #4
Цитата Сообщение от John Prick Посмотреть сообщение
Что значит "с заданными компонентами"? Элементы матрицы должны задаваться в конструкторе? Если так, то параметры конструктора: ширина, высота, указатель на массив с данными. Ну я бы так делал.
Количество строк, столбцов матрицы, ну и сами элементы матрицы типа double на дин выделенной памяти.

Добавлено через 2 минуты
Цитата Сообщение от John Prick Посмотреть сообщение
Что значит "с заданными компонентами"? Элементы матрицы должны задаваться в конструкторе? Если так, то параметры конструктора: ширина, высота, указатель на массив с данными. Ну я бы так делал.
Ну по идее вызов примерно такой должен быть
C++
1
matrix c(n,m,5.5,6.5,1.0,5.0)
Указатель на массив с данными в моем случае не решение...

При том для квадратной матрицы вызов уже чуть отличается.
C++
1
matrix c(n,5.5,6.5,1.0,5.0)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2012, 11:32     Конструктор #5
Как-то так. Второй конструктор пилите сами. Был бы __VA_ARGS__ во всех реализациях С++ - он бы был элементарным. А так почти копия.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <cstdarg>
#include <algorithm>
#include <iterator>
 
class Matrix
{
public:
   Matrix(size_t r, size_t c, ...) : rows(r), cols(c)
   {
      matrix = new double *[rows];
      std::for_each(matrix, matrix + rows, [this](double*& array)
      {
         array = new double[cols];
      });
      const size_t args_num = r * c;
      va_list vl;
      va_start(vl, args_num);
      for (size_t i = 0;  i < rows; ++i)
      {
         for (size_t j = 0; j < cols; ++j)
         {
            matrix[i][j] = va_arg(vl, double);
         }
      }
      va_end(vl);
   }
   ~Matrix()
   {
      std::for_each(matrix, matrix + rows, [this](double*& array)
      {
         delete[] array;
      });
      delete[] matrix;
   }
   Matrix(const Matrix&) = delete;
   Matrix& operator = (const Matrix&) = delete;
   friend std::ostream& operator << (std::ostream& os, const Matrix& obj)
   {
      std::for_each(obj.matrix, obj.matrix + obj.rows, [&obj, &os](const double* const array)
      {
         std::copy(array, array + obj.cols, std::ostream_iterator<double>(os, " "));
         os << std::endl;
      });
      return os;
   }
private:
   size_t rows, cols;
   double** matrix;
};
 
int main()
{
   Matrix m(2, 3, 1., 2., 3., 4., 5., 6.);
   std::cout << m << std::endl;
}
http://liveworkspace.org/code/e7795f...46a91954e760f7
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
26.10.2012, 16:11  [ТС]     Конструктор #6
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
Matrix(size_t r, size_t c, ...) : rows(r), cols(c)
А как сделать конструктор квадратной матрицы
C++
1
Matrix(size_t r, ...) : rows(r), cols(r)
Такой вариант работать не хочет.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2012, 16:13     Конструктор #7
Mogost, Вполне он будет работать. Что значит работать не хочет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 16:44     Конструктор
Еще ссылки по теме:

Конструктор класса не видит конструктор по умолчанию другого класса C++
C++ Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mogost
 Аватар для Mogost
7 / 7 / 1
Регистрация: 07.04.2012
Сообщений: 51
26.10.2012, 16:44  [ТС]     Конструктор #8
Цитата Сообщение от ForEveR Посмотреть сообщение
Mogost, Вполне он будет работать. Что значит работать не хочет?
http://liveworkspace.org/code/96eeae...d385ba02463f07

Работать то он может и будет, но он не вызывается в нужном мне случае... =\
Yandex
Объявления
26.10.2012, 16:44     Конструктор
Ответ Создать тему
Опции темы

Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru