|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||
FLTK, Страуструп, неоднозначность задачи!10.07.2018, 21:15. Показов 2494. Ответов 25
Метки нет (Все метки)
Привет, народ! Хочу попросить помощи в таком вопросе, есть следующая задача:
Кликните здесь для просмотра всего текста
Определите класс Controller, содержащий четыре виртуальные функции: on () , off () , set_level (int) и show() . Породите из класса Controller как минимум два класса. Один из них должен быть простым тестовым классом, в котором функция show () выводит на печать информацию о том, включен или выключен контроллер, а также его текущий уровень. Второй производный класс должен управлять цветом линий объекта класса Shape; точный смысл понятия "уровень" определите сами. Попробуйте найти третий объект для управления с помощью класса Controller.
Не совсем улавливаю смысл этого задания, особенно последнее предложение Попробуйте найти третий объект для управления с помощью класса Controller. что за объект и как его найти я ума не приложу. Возможно, есть те, кто сталкивался ранее с этой задачей или те, кто свежим взглядом увидит то, чего я не вижу, и объяснят смыл сего опуса. На данные момент смог написать следующее, набросок, если так можно выразиться: Кликните здесь для просмотра всего текста
Спасибо, заранее!
0
|
||||||
| 10.07.2018, 21:15 | |
|
Ответы с готовыми решениями:
25
Страуструп FLTK newline в Out_box Бьерн Страуструп. Инсталляция библиотеки FLTK
|
|
Комп_Оратор)
|
|||||||
| 25.07.2018, 11:56 | |||||||
|
Liss29, Вы правы. Я никогда не видел упоминаний о таких "абстрактных" базовых классах. И в Вашем задании не видно требований такой реализации. Я пока не увидел применения того "абстрактного" что закрывает конструктор, кроме как для запрета наследования для клиентского кода:
Но в Вашем случае, это не требуется.
0
|
|||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||||
| 25.07.2018, 21:51 [ТС] | ||||||||
|
Кликните здесь для просмотра всего текста
А вот о чисто виртуальных функциях он упоминает вскользь, как впрочем и дружественных функциях-классах, хотя, справедливости ради, нужно сказать, что он отсылает к книге Страуструпа "Язык программирования С++", но это что касается дружественных функций-классов.
0
|
||||||||
|
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
|
||
| 25.07.2018, 22:36 | ||
|
Я немного вмешаюсь в вашу дискуссию. Люблю абстрактные мысли и идеи
![]() Другом объявлен только первый класс и только первый класс может унаследоваться, запустив этот приватный конструктор, ибо он друг. Второй - не друг - не может запустить приватный конструктор базы - не видит его. Читая этот топик, невольно вспомнил лекции матана. Слооожно, но понять можно. Но я могу и попроще объяснить: делай свой проект. Принимай решения. Думай о том, что твой проект будут использовать другие. Код и все эти ограничения - это всего лишь повод указать другим разработчикам как надо использовать и как не надо использовать твой код. Никогда этого не говорил, но, ИМХО, за день создания кода своего проекта я понял больше, чем за неделю чтения синтаксических особенностей std::thread. Ошибки компилятора, библиотеки, активное гугление - это не сравнится с синтетическими заданиями даже самого Страуструпа. Книги я читаю только тогда, когда понимаю слёту что там написано. Тогда, когда уже уверен в том как это работает и почему следует писать так. Книга для меня - всего лишь подтверждение уже найденного мной, моей позиции. Например, сейчас я пишу свою "небольшую" змейку: https://github.com/Lyosha12/Snake-SFML Здесь можно увидеть поле std::unique_ptr<Filler> filler = nullptr;Filler - это класс-заполнитель клетки (Cell), которыми управляет бассейн клеток (CellsPool). Заполнитель, как сказано в описании, всего лишь оболочка для бонуса. А бонус уже - это виртуальный интерфейс, предоставляющий функцию "активации" бонуса, когда змейка его возьмёт. Это сложная архитектура и я не один день её переделывал. Однако это позволяет мне создать гибкость, которую я запланировал. Это было небольшое введение. А теперь по поводу того, нужно ли сосуществовать виртуальной функции и данным, которые она использует. Бонус может действовать несколько ходов змейки. Поэтому не только при создании, но и после бонусу (абстракции) требуется доступ к змейке, которая его уже хранит и обслуживает у себя. И для этого я храню не константную ссылку на змейку. Я привёл этот пример не потому, что хотел ещё раз повторить сказанное. Но потому, чтобы показать важность "реальной" разработки приложения. Такого приложения, которое ориентируется на мир, а не на абстрактные задания из книги, которые иногда и не понять как интерпретировать. И только поэтому я сейчас уже не читаю книгу сперва, а потом уже в код погружаюсь. Нет. Сначала - код, после чего уже становится ясно о чём пишет автор, чего он хочет и чего, может, не хочет. Есть интересные задачки на подумать. Есть задачки на скорость мышления. Но задачки на синтаксис, на синтетические упражнения с тем, что может язык, я считаю, надо проводить самостоятельно. Интересно что-то - попробуй запрограммировать. Получи ошибки, загугли, поспрашивай на форуме, а уж потом, если ещё нет уверенности в понятом, обращайся к книге. Конечно, есть такие книги, которые лучше сначала прочитать от и до, чтобы понимать какими инструментами можно выстраивать проект. Например, это "Шаблоны игрового проектирования" Р. Найстрома. Ну и эпилог моего монолога, скажем так. Проблема возникла из-за неоднозначности. А любая неоднозначность должна быть разрешена до сдачи проекта. Если сдавать некому - покажи что ты знаешь, что ты умеешь. Хотя бы сам себе, потом уже форуму. Предложи разные подходы и спроси мнения знающих людей. Программирование, как много где написано, - больше практика. И долго с этим я был не согласен. Но, для себя уже прояснил: неделя чтения проигрывает дне кодинга.
0
|
||
|
Комп_Оратор)
|
|||||
| 26.07.2018, 14:35 | |||||
|
Добавлено через 15 минут ![]() Впрочем, никто не запрещает хранить данные в абстрактном классе. Я говорил лишь о том, что чисто виртуальному методу они не нужны.
0
|
|||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||||||
| 27.07.2018, 06:00 [ТС] | ||||||||||
.Добавлено через 1 час 21 минуту Не по теме:
Кликните здесь для просмотра всего текста
0
|
||||||||||
|
Комп_Оратор)
|
|||
| 27.07.2018, 13:02 | |||
|
Не по теме:
Добавлено через 4 часа 28 минут Liss29, я помню, что где-то в The Design and Evolution of C++ Страуструп говорит о том, что был приятно удивлён когда ему подсказали возможность сокрытия конструктора. Может я путаю. Но не вспомню, в каком контексте шла речь. О синглтонах ли или о других классах создаваемых фабричными методами. Не могу уже найти. Но я нашёл цитату о том, почему не ввдено специального ключевого слова вроде "abstract". Из неё можно предположить, что он и сам предпочитает думать об абстрактном классе, как о классе с чисто виртуальным методом. А тот, что мы разбирали (пытались разобрать), - возможность создать то что в шарпе называется sealed. То есть, если не использовать друзей, то наследование невозможно не в открытом ни в закрытом варианте. И это прямая противоположность абстрактному классу, как интерфейсу, - классу прямо предназначенному для открытого наследования. Вот сама цитата: http://www.stroustrup.com/hopl2.pdf Bjarne's History of C++: 1979−1 991, Page on stroustrup.com
То есть, можно создавать и кастрированные абстрактные классы, но тут БС не говорит о них.
0
|
|||
| 27.07.2018, 13:02 | |
|
Непонятная неоднозначность. Виртуальная неоднозначность Неоднозначность декларации Неоднозначность методов Неоднозначность с делегатами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|