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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.92
julikas
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 3
#1

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

02.10.2011, 01:15. Просмотров 5611. Ответов 9
Метки нет (Все метки)

Задача такая: базовый класс - фигура, производные классы - круг, треугольник и т.п.
Пользователь выбирает, какие фигуры будут на экране и в каком порядке создаются. Для них цвет, радиус, угол поворота и т.п.
1. Нужно создать очередь объектов. - это первый вопрос. Можно ли создать очередь объектов базового класса, а при инициализации как-то им "говорить", к какому из дочерних классов они относятся? Активная фигура должна подсвечиваться. Надо предусмотреть возможность удаления фигур из списка.
2. Отрисовка фигур будет производиться в соответствующих методах дочерних классов, и ее нужно делать на битмапку. Как сделать одну битмапку и отрисовывать туда всех? и как потом битмап копировать на image?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 01:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив объектов разных производных классов (C++):

Как создать массив из объектов разных классов, имеющих общего предка? - C++
Есть основной класc 'Автомобиль' его наследуют 3 класса: мини вен, купе и седан. Как создать массив объектов класса 'автомобиль' что бы...

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

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов - C++
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Взаимодействие объектов разных классов - C++
Я или туплю или чего-то не понимаю\не до понимаю. Вопрос в самом коде. class Player { int health; int damage; public: ...

Создание коллекции объектов разных классов - C++
Здравствуйте. Помогите, пожалуйста, с задачкой создания коллекции объектов разных типов. Я сначала реализовал программку, использовав...

Запись и чтение объектов разных классов в один файл - C++
Здравствуйте. Изучаю С++ по Лафоре. Дошёл до места, где объясняется, как записывать объекты разных классов в один бинарник. У Лафоре,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
26.03.2012, 00:06 #9
Sanek911, сделайте метод, который возвращает указатель на динамически выделенный экземпляр объекта (что-то вроде фабрики).
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2012, 00:14
Привет! Вот еще темы с ответами:

Вектор объектов разных классов. Доступ к свойствам элемента вектора - C++
есть базовый класс class A { //... } есть производные классы class A1 : public A { //... public:

Создать массив в базовом абстрактном классе, и его передать функциям производных классов - C++
есть полностью абстрактный (виртуальный) класс. там все функции виртуальные и равны 0. Назовем его class A есть 3 производных ОТ НЕГО...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Массив разных объектов - C++
Здравствуйте, в институте задали написать шахматы на C++ с использованием классов, т.е все фигуры(например TPawn) должны быть основаны...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2012, 00:14
Ответ Создать тему
Опции темы

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