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

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

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

12 ответов

18 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта