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

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

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

12 ответов

17 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта