170 похожих чатов

Решил немного вспомнить ООП, и задался таким вопросом. https://pastebin.com/HGC1Z8rz Вот решил потренировать

пример с различными животинками и звуки которые они издают. Есть базовый класс креатуре, который содержит в себе юник_птр на саунди, который является интерфейсом для издавания звуков. От него наследуем коровок, кошечек, для них делаем отдельные кау_саунди, кэт_саунди. И тут у меня возник вопрос, я не хочу чтоб когда пользователь создавал базовое креатуре, он мог в него пихнуть интерфейс для кошачьих и коровьих звуков, и при этом я хочу достаточно жёстко залочить что котята и коровки в конструкторах у себя передают именно свои интерфейсы, без возможности вмешаться пользователю. Поэтому решил сделать базовый конструктор креатуре публичным без возможности передачи интерфейса звука, а для наследников которым нужно передавать свои интерфейсы, сделал протектед конструктор. Насколько это вообще валидная тема? Или по рукам надо за такое бить?

12 ответов

5 просмотров

а как использовать для инициализации объекта чисто виртуальный класс

Creature - это тварь по-русски.

Ну ... creature(std::string const& name) : name_ { std::move(name) }, зачем ты пишешь то, что не понимаешь ?

Тут проблема чисто создания нужного soundee, ты её тут никак не решаешь. Это надо какие-то creational patterns из GoF использовать чтобы гарантированно создавать у нужной твари нужный звук.

сложно даже что-то сказать ещё , тут главное - зачем строить 2 параллельные иерархии классов, когда "издавание звука" - это и так "свойство" живой твари. Зачем его выдёргивать из иерархии классов живых тварей ?

Станислав-Лопатин Автор вопроса

А если мы захотим выводить звук твари в разные места? Например файл, или вовсе в звуковой интерфейс

Станислав-Лопатин Автор вопроса

В каждом наследнике оверрайдить шаблонную функцию в параметры которой мы будем передавать интерфейс вывода звука?

Станислав Лопатин
А если мы захотим выводить звук твари в разные мес...

С точки зрения ООП вопрос это сложный, с точки зрения С++ тут вопроса нет вообще

Станислав-Лопатин Автор вопроса
Ilya Zviagin
При чём тут шаблонные функции ?

А как мы тогда иначе будем передавать интерфейс куда надо выводить звук?

Станислав Лопатин
А если мы захотим выводить звук твари в разные мес...

Вот и делай интерфейсы вывода звука и передавай его своим тварям

Похожие вопросы

Обсуждают сегодня

здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
1
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
кто тебе сказал, что она угроблена? многие только начинают жизнь, после увольнения из Гугла, Майкрософта, Оракла,...
Alex Kom
9
В альтернативе у нас сидеть горбатиться на дядю в галерах, пока не помрешь или пока тебя не заменят более молодым сотрудником, который готов гребсти в два раза дешевле. Вот и ...
Кабан Кабанов
7
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Карта сайта