С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

3
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
23.11.2014, 05:32 #2
Цитата Сообщение от luigration Посмотреть сообщение
Как я понимаю, память выделилась, но объектов как таковых нет.
память выделили только под указатели, под объекты никто не выделял места.
Цитата Сообщение от luigration Посмотреть сообщение
тут компилятор пишет, что значение перед точкой должно быть классом или структурой.
потому что mas[0] - это указатель, а значит, селектор надо другой "->"
C++
1
mas[0]->Number =0;
1
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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 писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
1
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 172
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 писать его потомков, а при создании самого массива лучше не надо и декларировать указатель на сам массив надо именно от базового класса.
Спасибо. Совершенно из головы вылетело.
0
23.11.2014, 12:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 12:25
Привет! Вот еще темы с ответами:

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

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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