|
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5
|
|
ООП. Геометрические фигуры10.02.2020, 17:52. Показов 5810. Ответов 27
Классическая задачка на абстрактные классы: создать абстрактный класс Figure, напихать туда чисто виртуальных методов аля Draw(), Rotate(), Expand() и так далее, унаследоваться от него всякими Line, Triangle, реализовать методы абстрактного класса, запихать адреса потомков в вектор указателей родительского класса и вызывай себе из него методы.
Но вот задумался: по сути дела у нас может быть Point - класс, описывающий точку как геом. фигуру. И вот её крутить и деформировать, как по мне, абсолютно бесполезно. И что же это выходит - придется пилить отдельный класс FigureWithoutRotate или лепить мелкие интерфейсы аля IDraw(), IRotate(), IExpand(), где надо их реализовать. Но тогда фиг запихнёшь все твои точки и треугольники в один вектор. Можно вообще продолжать наследоваться от Figure, а для неугодных методов делать пустую реализацию и/или кидать их в приватную секцию. Короче ступор. Как же тогда поступить?
0
|
|
| 10.02.2020, 17:52 | |
|
Ответы с готовыми решениями:
27
Классическая задача ООП: геометрические фигуры
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 10.02.2020, 18:41 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5
|
||
| 10.02.2020, 19:10 [ТС] | ||
0
|
||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
||
| 10.02.2020, 20:25 | ||
|
2. Не придумывать классификацию "на все случаи жизни", т.к. это гиблое дело. 3. На основании поставленных задач определить отношения между классами. В результате может оказаться, например, что Point нужна лишь как часть (подобъект) более сложной геом. фигуры. В этом случае она играет роль вершины и вступает с другими фигурами в ассоциативную связь. Тогда возникает вопрос стоит ли Point наследовать от Figure. Если же круг задач требует от Point быть самостоятельной фигурой, то для нее следует определить центр трансформации (т.н. pivot point) и работать с ней как с полноценной геометрией, потому что имея центр трансформации, можно перемещать поворачивать и масштабировать все что угодно, в том числе и точку.
2
|
||
|
|
|||
| 10.02.2020, 21:18 | |||
|
Помимо указанных выше замечаний: Можно сказать что если Rotate(), Expand() лишены смысла то возможно их не стоит включать в класс Figure. А создать другой абстрактный класс с ними.
1
|
|||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
||
| 10.02.2020, 21:25 | ||
|
При этом деформация точки это абсолютно нормальная (имеющая смысл) операция, возможная в том случае, если для геометрической фигуры (в т.ч. и точки) определена другая точка, относительно которой производится деформация.
1
|
||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
|
| 10.02.2020, 21:31 | |
|
1
|
|
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
||
| 10.02.2020, 21:48 | ||
|
0
|
||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
|
| 10.02.2020, 23:36 | |
|
Avazart, не буду спорить, т.к. подзабыл уже школьные определения. Вот тут по ссылке, например, есть такое: https://naobumium.info/planime... tochka.php
0
|
|
|
|
||
| 10.02.2020, 23:46 | ||
|
Точку определять как фигуру, а фигуру как множество точек как-то не логично.
Добавлено через 1 минуту
В то время как фигура- плоский объект, тело- трехмерный объект.
0
|
||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
||
| 10.02.2020, 23:48 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 21.05.2019
Сообщений: 5
|
|
| 11.02.2020, 13:30 [ТС] | |
|
Заставили задуматься конечно по поводу природы точки. Пришел к двум вариантом: или точка нечто вообще иное и единственное, что будет роднить её с фигурой это возможность её рисовать, перемещать и так далее. Выходит, будет отдельный абстрактный класс, который наследует несколько интерфейсов. И потом наследуется от него, реализуем интерфейсы и готово.
И второй вариант: точка геометрическая фигура по своим свойствам схожа с кругом и тогда нужно сначала круг сделать, потом от него наследоваться. И если поворот вокруг своего центра для круга может быть полезным (например, в круге текст или символ), то для точки придется писать пустую реализацию, ведь поворот вокруг другой точки, как по мне, немного другая история и для неё нужна отдельная функция. А то выходит как перегрузка оператора ^ не как XOR, а как возведение в степень. Хотя, многие так делают и им норм
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 11.02.2020, 13:59 | ||||||
|
Chupakabra0_0, т.к. у тебя задача на классы, а не на математику или графику, то вот пример для твоей иерархии
1
|
||||||
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
|
| 11.02.2020, 15:33 | |
|
zayats80888, как может выглядеть осмысленная реализация метода Point::scale(double factorX, double factorY) ?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 11.02.2020, 17:42 | |||||||
|
Тут так же.
0
|
|||||||
| 11.02.2020, 17:42 | |
|
Помогаю со студенческими работами здесь
20
ООП . Геометрические тела Геометрические фигуры с++ нарисовать геометрические фигуры
Геометрические фигуры: реализовать наследование с полиморфизмом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|