![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Zanoza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 6.5.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Здравствуйте!
![]() Я никак не могу понять каким образом Figure может быть наследником Shape (это же контейнер)? Может кто-нибудь может объяснить в чем смысл моей задачи? ![]() |
|||
|
||||
nickless |
|
||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
А почему бы нет? Смысл в том, что с помощью Figure можно будет теми же методами (виртуальными, полезно для полиморфизма) рисовать составные фигуры. Т.е. например Figure имеет методы
Тогда можно будет присто вызвать что-то вроде figure.draw(), которая в свою очередь вызовет draw() всех своих частей, в деструкторе ~Figure желательно удалять все части. Тогда можно будет сделатъ нечто вроде
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||
|
|||||||
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
Описание шаблона компоновщик в Wikipedia
Код используется только для иллюстрации шаблона и не может использоваться в реальных приложениях (поэтому не объявлены деструкторы, не используются итераторы и так далее). |
|||
|
||||
Zanoza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 6.5.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Спасибо за объяснения!!! Я недавно начала разбираться с ООП и всем остальным. Правильно ли я поняла, что контейнер это не только список, очередь, множество и т.д...но и любой произвольный класс в котором определена функция add?
Добавлено через 3 минуты и 39 секунд adLucem, спасибо за код, но если честно я ничего не поняла, я пока не могу врубиться в саму идею ч то от меня требуется, я только недавно начала писать на с++ и пока еще многого не понимаю Добавлено через 13 минут и 34 секунды Подскажите пожалуйста, чтобы реализовать эту библиотеку мне нужно сделать Shape, от него наследовать все остальное в том числе Figure, потом реализовать в Figure функцию, добавляющую объект типа наследника Shape и потом создать объект типа Figure который будет этим самым контейнером который мне нужен? Я правильно поняла? |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
В принципе, контейнер, это любой класс, смысл которого состоит в удобном хранении других объектов, как они туда попадают это не так важно.
ЗЫ. Почитай еще про полиморфизм -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Zanoza |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 6.5.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Спасибо! Обязательно почитаю!
|
|||
|
||||
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
Краткое объяснение.
Базовый класс Shape содержит один или несколько абстрактных методов, которые обеспечивают добавление элементов в контейнер (в моем случае чтобы не писать эти методы я просто использую vector и возвращаю его при вызови Dependences). Все классы наследники, которые являются листовыми (то есть не являются контейнерами и не могут содержать других объектов) используют общее поведение по умолчанию (например, в моем коде возвращается нулевое значение вместо указателя коллекции элементов контейнера). Все классы наследники, которые являются композитными ( то есть являются контейнерами и могут содержать другие объекты, в данном случае Figure ) реализуют управление коллекцией (например, в моем коде создают объект вектора). Чтобы различать листья и композиты может использоваться специальная функция (например, IsLeaf или IsComposite) либо косвенные механизмы, например в моем коде проверяется, если указатель на коллекцию зависимых объектов равен нулю - то это листовой объект, в противном случае - композит. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Zanoza, не создавайте дубликатов тем. Дублирующую тему в "Центре помощи" я удалил.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |