Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 03:54   #1
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию Массив объектов Array

Есть класс Array - класс одномерных массивов. Второй класс - Matrix, в этом классе я создаю массив объектов класса Array. Так вот дело в том, что при выделении памяти я не могу поменять размер объекта класса Array, по умолчанию равен 10 элементам.
Код:
   ptr = new Array [size]; // выделить место в памяти для матрицы
Я могу манипулировать количеством строк матрицы, но количеством столбцов не получается. Скорее всего, нужно перегружать оператор new. Но не знаю как. Подскажите, пожалуйста как быть?
konors вне форума Ответить с цитированием
Старый 12.11.2012, 15:41   #2
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию Массив объектов Array

У меня в классе объявлено как
Код:
Array *ptr; // указатель на матрицу типа Array
При этом могу обращаться к элементам через индекс
Код:
ptr[ix][jx] = 0;
Но когда дело доходит до этого, то возникают поблемы
Код:
    ptr = new Array [size]; // выделить место в памяти для матрицы (количество строк)
    for(int i = 0; i < size; i++)
        ptr[i].getPtr() = new int [ptr->getSize()]; // ошибка в этой строке (нужно выделить память под ptr->getSize() столбцов)
Ошибка.
/home/den/prog/Qt_SDK/er/aga-build-desktop-Qt___PATH______/../aga/matrix.cpp:32: ошибка: lvalue required as left operand of assignment
konors вне форума Ответить с цитированием
Старый 12.11.2012, 16:22   #3
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию

Есть еще у кого-то идеи? Очень надо разобраться в этом.
konors вне форума Ответить с цитированием
Старый 12.11.2012, 16:26   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
    ptr = new Array [size]; 
    for(int i = 0; i < size; i++)
        ptr[i].getPtr() = new int [ptr->getSize()];
Первый вариант (ИМХО, самый разумный): не интерпретировать матрицу как набор строк и вообще не использовать класc Array. Код в таком случае принимает вид
Код:
ptr = new int [size*size];
Доступ к элементу при этом реализуется отдельным методом, принимающим номер строки и столбца.
Второй вариант: делать шаблонный класс, параметризованный размером. Тогда получится
Код:
ptr = new Array<N> [N];
.
Третий вариант: реализовать в Array конструктор без параметров (не выделяющий памяти вообще) и метод InitWithSize, выделяющий память. Тогда:
Код:
    ptr = new Array [size]; 
    for(int i = 0; i < size; i++)
        ptr[i].InitWithSize(size);
Abstraction вне форума Ответить с цитированием
Старый 12.11.2012, 16:26   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

( -- дубль -- )
Abstraction вне форума Ответить с цитированием
Старый 12.11.2012, 16:37   #6
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию

Класс Array мне обязательно нужно использовать, таково ТЗ. Шаблонный класс вообще не рассматриваю. Что же касается создания отдельного метода - можно, но это придется переделывать класс Array.
У меня есть идея таким методом выделить:
Код:
ptr = new Array(4) [size];
то есть при выделении использовать конструктор не по умолчанию а с параметром, в данном случае 4 - количество столбцы.
Только одна проблема - так не работает, может что-то я неправильно записал. Подскажите плиз.
konors вне форума Ответить с цитированием
Старый 12.11.2012, 16:45   #7
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию

Я думаю такой способ должен сработать, только не зная как правильно им воспользоваться.
konors вне форума Ответить с цитированием
Старый 12.11.2012, 17:05   #8
konors
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 6
По умолчанию

Пришел к выводу, что это не возможно. Тема закрыта.
konors вне форума Ответить с цитированием
Старый 12.11.2012, 17:24   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Только одна проблема - так не работает, может что-то я неправильно записал. Подскажите плиз.
Ответ: так не работает. new, насколько помню, всегда вызывает конструктор без параметров; предлагаемой Вами синтаксической формы в языке не существует.
Abstraction вне форума Ответить с цитированием
Старый 12.11.2012, 18:59   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ptr = new Array [size]; // выделить место в памяти для матрицы
ptr[1] = new четамзатип[егоразмер]
Учитывая что нужно **ptr
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив объектов!!! OliverVood Visual C++ 5 24.08.2012 16:03
Написать программу на HTML и JavaScript с использованием объектов Array, Date и String. Marika lady Помощь студентам 2 12.10.2011 19:03
Динамический массив класса Array emnm Общие вопросы C/C++ 0 21.12.2010 22:04
массив объектов balamut JavaScript, Ajax 4 29.05.2009 14:49
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25