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

Массив объектов разных производных классов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.92
julikas
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
02.10.2011, 01:15     Массив объектов разных производных классов #1
Задача такая: базовый класс - фигура, производные классы - круг, треугольник и т.п.
Пользователь выбирает, какие фигуры будут на экране и в каком порядке создаются. Для них цвет, радиус, угол поворота и т.п.
1. Нужно создать очередь объектов. - это первый вопрос. Можно ли создать очередь объектов базового класса, а при инициализации как-то им "говорить", к какому из дочерних классов они относятся? Активная фигура должна подсвечиваться. Надо предусмотреть возможность удаления фигур из списка.
2. Отрисовка фигур будет производиться в соответствующих методах дочерних классов, и ее нужно делать на битмапку. Как сделать одну битмапку и отрисовывать туда всех? и как потом битмап копировать на image?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.10.2011, 13:03     Массив объектов разных производных классов #2
1. Нужно создать массив указателей на базовый класс, а инициализировать их адресами объектов производных классов. Т.е., например, так:

C++
1
2
3
4
5
std::vector< Base * > shapes;
//.....
shapes.push_back(new Derived1());
shapes.push_back(new Derived2());
shapes.push_back(new Derived3());
julikas
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
03.10.2011, 13:56  [ТС]     Массив объектов разных производных классов #3
объясните пожалуйста чайнику - что есть std? и прочее. где какие методы. интуитивно понятно, но как берусь писАть - ступор...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.10.2011, 16:03     Массив объектов разных производных классов #4
julikas, даа... Книжку в руки - и вперёд. Берётесь писать полиморфные программы и не знаете основ основ... Никто не будет переписывать сюда из книги ответы на каждый из интересующих вас вопросов.
Предваряя следующий вопрос - http://www.cyberforum.ru/cpp/thread152353.html.
julikas
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
04.10.2011, 21:34  [ТС]     Массив объектов разных производных классов #5
Спасибо! теперь гораздо лучше )
Sanek911
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 42
25.03.2012, 23:48     Массив объектов разных производных классов #6
Может есть способ сделать так, что массив содержит объекты разных типов, не указатели на эти объекты. Если есть, будьте так добры и покажите решение
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.03.2012, 00:00     Массив объектов разных производных классов #7
Цитата Сообщение от Sanek911 Посмотреть сообщение
Может есть способ сделать так, что массив содержит объекты разных типов, не указатели на эти объекты. Если есть, будьте так добры и покажите решение
Sanek911
Прежде всего скажи зачем тебе это?
Мы способны хранить указатели на разные объекты в одном массиве прежде всего потому, что сам по себе указатель имеет одинаковый конечный размер sizeof(void*)=sizeof(int*)=sizeof(Shape*). А в массивах можно хранить объекты только одинакового размера.

Поэтому в одном массиве могут быть указатели на разные объекты, а экземпляры разных объектов в массиве хранить бессмысленно. У них размер разный!

Кроме того, мы не можем создавать экземпляры абстрактных классов (а класс фигура, на сколько я понял абстрактен)
Sanek911
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 42
26.03.2012, 00:03     Массив объектов разных производных классов #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Прежде всего скажи зачем тебе это?
у меня такое задание: создать интерфейс, и 3 его реализации, затем заполнить массив объектами этого интерфейса. Затем необходимо сделать функцию, которая принимает массив, не меняет его и возвращает другой массив в который скопированы все элементы входного массива.
Ключевой момент -- скопированы не указатели на элементы, а сами элементы
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
26.03.2012, 00:06     Массив объектов разных производных классов #9
Sanek911, сделайте метод, который возвращает указатель на динамически выделенный экземпляр объекта (что-то вроде фабрики).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2012, 00:14     Массив объектов разных производных классов
Еще ссылки по теме:

C++ Создание коллекции объектов разных классов
Вектор объектов разных классов. Доступ к свойствам элемента вектора C++
Массив разных объектов внутри класса C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.03.2012, 00:14     Массив объектов разных производных классов #10
Цитата Сообщение от Sanek911 Посмотреть сообщение
у меня такое задание: создать интерфейс, и 3 его реализации, затем заполнить массив объектами этого интерфейса. Затем необходимо сделать функцию, которая принимает массив, не меняет его и возвращает другой массив в который скопированы все элементы входного массива.
Ключевой момент -- скопированы не указатели на элементы, а сами элементы
Ну скажи ну как ты хочешь без указателей обойтись? Так что ли???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Shape{
public:
    Shape(){}
//....
    ~Shape(){}
virtual void Draw()=0;
};
class Circle: public Shape{
public:
    Circle(){}
//....
    ~Circle(){}
    void Draw(){}
};
int main(){
//Shape Array[10];//Выдаст ошибку: попытка создать экземпляры абстрактного класса
Shape* Array2[10];//нет ошибки
Array2[5]=new Circle();
delete Array2[5];
return 0;
}
Yandex
Объявления
26.03.2012, 00:14     Массив объектов разных производных классов
Ответ Создать тему
Опции темы

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