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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
#1

Массив указателей на объекты - C++

22.11.2014, 21:40. Просмотров 551. Ответов 3
Метки нет (Все метки)

Доброго времени суток.
В моем коде базовый класс имеет два наследника. Четвертый класс содержит динамический массив указателей на наследники. Проблема в работе с массивом.

C++ (Qt)
1
2
Element **mas = new Element*[size]; // element - базовый класс, наследники - А и В
mas[0].Number =0; // тут компилятор пишет, что значение перед точкой должно быть классом или структурой.
Как я понимаю, память выделилась, но объектов как таковых нет. Подскажите, как сделать правильно и как вообще работать с такими массивами. В учебниках просто все примеры в общем виде и внимание авторов возможные проблемы не концентрируется.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 21:40     Массив указателей на объекты
Посмотрите здесь:

Динамический массив указателей на объекты - C++
вообщем была тут на форуме задача, в подробности вдаваться не буду, смысл сейчас заключается в том, чтобы создавать в цикле объекты, и в их...

Массив указателей на объекты подклассов - C++
Доброго времени суток всем!!! Проф задал написать парсер простых математических выражений с использованием скобок. Код не должен...

Динамический массив указателей на объекты класса - C++
Добрый вечер! Нужна помощь У меня имеется класс STROKA(вроде уже готовый,и все хорошо) Только вот никак не могу понять, как создать...

Как понять: массив указателей на объекты классов? - C++
если приведете пример буду рад.

Указатель на массив указателей на объекты, передать в метод объекта - C++
Здравствуйте! Нужно решить задачу, есть такой класс. class MyClsDisk { public: void...

Виртуальные функции (создать массив указателей на объекты трех классов) - C++
Задание: создать массив указателей на объекты трех классов. Метод Show почему-то не переопределяется. В данном коде вводится 3 элемента в...

Можно ли динамически выделить память под массив указателей, на объекты класса? - C++
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Конструктор, в аргументах которого передается массив указателей на объекты и размер этого массива - C++
Создайте новую версию класса Stack с конструктором по умолчанию и вторым конструктором, в аргументах которого передается массив указателей...

"Морской бой": массив указателей на объекты vs контейнер stl. Что лучше? - C++
Задание такое: Задача№2 Разработать программу «Морской бой», где пользователь будет видеть свои 2 игровых поля и вводить...

Передвинуть элементы в массиве указателей на объекты fstream - C++
Здравствуйте. Есть прога в которой одновременно надо обрабатывать до 10 файлов. Для этого создан массив указателей на fstream. Проблема...

Привсоение масиву указателей объекты без имени - C++
Здравствуйте. Читал книгу там был пример, в нем не могу понять что присваивается массиву указателей ведь TwoDShape и Triangle это классы, а...

Массивы указателей на объекты как данные класса - C++
Вообщем: мне надо так,чтобы объект имел связь с N-ым количеством каких-то объектов.про динамические массивы в курсе. такой вопрос,что...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
23.11.2014, 05:32     Массив указателей на объекты #2
Цитата Сообщение от luigration Посмотреть сообщение
Как я понимаю, память выделилась, но объектов как таковых нет.
память выделили только под указатели, под объекты никто не выделял места.
Цитата Сообщение от luigration Посмотреть сообщение
тут компилятор пишет, что значение перед точкой должно быть классом или структурой.
потому что mas[0] - это указатель, а значит, селектор надо другой "->"
C++
1
mas[0]->Number =0;
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.11.2014, 05:57     Массив указателей на объекты #3
Так как объектов ещё нет, то перед
C++
1
mas[0]->Number =0;
надо ещё раз применить new, но уже
C++
1
mas[0]=new Element;
,
C++
1
2
3
4
for (i=size-1; i>=0; --i)
{
 mas[i]=new Element;
}
,
C++
1
2
3
4
for (i=size-1; i<size; --i) // только для беззнаковых типов, так как условие использует переполнение типа, а при переходе через ноль оно происходит только у беззнаковых
{
 mas[i]=new Element;
}
,
C++
1
mas[0]=new Element;
,
C++
1
2
3
4
for (i=0; i<size; ++i)
{
 mas[i]=new Element;
}
,
C++
1
2
3
4
for (p=mas+size-1; p>=mas; --p)
{
 *p=new Element;
}
,
C++
1
2
3
4
for (p=mas; p<mas+size; ++p)
{
 *p=new Element;
}
,
C++
1
2
3
4
for (p=mas; p<=mas+size-1; ++p)
{
 *p=new Element;
}
, или
C++
1
2
3
4
for (p=mas, last=mas+size-1; p<=last; ++p)
{
 *p=new Element;
}
.

Добавлено через 2 минуты
Во всех случаях можно при создании объектов вместо Element писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
23.11.2014, 12:25  [ТС]     Массив указателей на объекты #4
Цитата Сообщение от Croessmah Посмотреть сообщение
память выделили только под указатели, под объекты никто не выделял места.

потому что mas[0] - это указатель, а значит, селектор надо другой "->"
C++
1
mas[0]->Number =0;
Черт возьми, точно. Это же указатели. Спасибо.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Так как объектов ещё нет, то перед
C++
1
mas[0]->Number =0;
надо ещё раз применить new, но уже
C++
1
mas[0]=new Element;
,
C++
1
2
3
4
for (i=size-1; i>=0; --i)
{
 mas[i]=new Element;
}
,
C++
1
2
3
4
for (i=size-1; i<size; --i) // только для беззнаковых типов, так как условие использует переполнение типа, а при переходе через ноль оно происходит только у беззнаковых
{
 mas[i]=new Element;
}
,
C++
1
mas[0]=new Element;
,
C++
1
2
3
4
for (i=0; i<size; ++i)
{
 mas[i]=new Element;
}
,
C++
1
2
3
4
for (p=mas+size-1; p>=mas; --p)
{
 *p=new Element;
}
,
C++
1
2
3
4
for (p=mas; p<mas+size; ++p)
{
 *p=new Element;
}
,
C++
1
2
3
4
for (p=mas; p<=mas+size-1; ++p)
{
 *p=new Element;
}
, или
C++
1
2
3
4
for (p=mas, last=mas+size-1; p<=last; ++p)
{
 *p=new Element;
}
.

Добавлено через 2 минуты
Во всех случаях можно при создании объектов вместо Element писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
Спасибо. Совершенно из головы вылетело.
Yandex
Объявления
23.11.2014, 12:25     Массив указателей на объекты
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru