С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/88: Рейтинг темы: голосов - 88, средняя оценка - 4.82
13 / 10 / 5
Регистрация: 04.01.2013
Сообщений: 205

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

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

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

C++ (Qt)
1
2
Element **mas = new Element*[size]; // element - базовый класс, наследники - А и В
mas[0].Number =0; // тут компилятор пишет, что значение перед точкой должно быть классом или структурой.
Как я понимаю, память выделилась, но объектов как таковых нет. Подскажите, как сделать правильно и как вообще работать с такими массивами. В учебниках просто все примеры в общем виде и внимание авторов возможные проблемы не концентрируется.
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2014, 21:40
Ответы с готовыми решениями:

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

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

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

3
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.11.2014, 05:32
Цитата Сообщение от luigration Посмотреть сообщение
Как я понимаю, память выделилась, но объектов как таковых нет.
память выделили только под указатели, под объекты никто не выделял места.
Цитата Сообщение от luigration Посмотреть сообщение
тут компилятор пишет, что значение перед точкой должно быть классом или структурой.
потому что mas[0] - это указатель, а значит, селектор надо другой "->"
C++
1
mas[0]->Number =0;
2
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.11.2014, 05:57
Так как объектов ещё нет, то перед
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 писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
1
13 / 10 / 5
Регистрация: 04.01.2013
Сообщений: 205
23.11.2014, 12:25  [ТС]
Цитата Сообщение от 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 писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
Спасибо. Совершенно из головы вылетело.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2014, 12:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru