Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848

Как лучше всего создать класс управляющий другим классом

05.03.2023, 00:06. Показов 2035. Ответов 26

Студворк — интернет-сервис помощи студентам
Вопрос: Как лучше всего создать класс управляющий другим классом (не вложенным, а отдельным).

Подробнее: есть у меня класс, опишу его образно, ибо показывать его не обязательно, нужны только примеры. так вот, класс условно А умеет просто писать циферки, вот есть у него 10 методов, каждый из которых пишет цифру 1,2,3 и так далее.
Далее понадобилось куча сценариев, в данном примере номеров из цифр, что бы много раз их писать, но не делать функцию, а сделать класс для этого (помимо сценария вызова методов из класса А будут и поля у класса Б). И вот условный класс Б будет иметь методы, которые печатают номера +8800... +7949.. и тд. Но печатать посредством создания класса А, а лучше беря в управление уже готовый инициализированный объект класса А, и его методами уже производить печатку номера. Как лучше это сделать? Класс А я предоставлю, от вас прошу только пример класса Б в роли управляющего, в роли эдакого сценариста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
class PrintDigit //условный класс А
{
    //поля на примере не описываю
 
public:
    void Print_0()
    {
        std::cout << 0;
    }
 
    void Print_1()
    {
        std::cout << 1;
    }
 
    void Print_2()
    {
        std::cout << 2;
    }
};
 
int main()
{
    PrintDigit class_A;
 
    //вот здесь хочу вызвать класс Б, который по методу, например
    //Print_number_Laborant() возьмет под управление класс А
    //и напишет его методами 01220. Очень желательно взять именно
    //уже существующий объект
    class_A.Print_0();
    class_A.Print_1();
    class_A.Print_2();
    class_A.Print_2();
    class_A.Print_0();
    std::cout << std::endl;
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2023, 00:06
Ответы с готовыми решениями:

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать что я упустил некоторые моменты,не...

Как лучше всего создать форму в С++
Хочу попробовать создать не консольную программу, а графическую. Как лучше всего создавать формы?

Как лучше всего создать вторую БД?
Здравствуйте, Уважаемые форумчане! Стоит задача: создать prod2 с backup PRIMARY prod1 со всеми архивлогами. Затем по истечению какого-то...

26
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
06.03.2023, 15:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
знает что у неё должны быть колеса,
Знать - это одно. Уметь их производить - это другое.
Разные вещи.

Добавлено через 1 минуту
К тому же тут совсем не машина, и ТС в самой шапке это подчеркнул, что хочет именно "разделить" эти два класса и их роли, избавившись от явной композиции.

Добавлено через 5 минут
XLAT, агрегация, включая жесткую, имеет смысл, если один объект используется во многих местах, но он там не нужен и будет просто дублироваться, так зачем каждому его хранить ?
И даже больше, у каждого будут свои состояния, а требуется работа с одним и тем же объектом и его состоянием.

Почему не наследовать ?
Может логический смысл ? Зачем той же машине наследоваться от колеса ?
Или объекту Q от объекта X если он им не является, но использует его средства ?
Тут большое поле для маневров

Добавлено через 4 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
но машины могут быть с разными фичами:
- можно менять колеса.
- нельзя менять колеса. (погнул колесо - выкинь машину)
Это только ТС-у знать, что ему и как нужно.
0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
06.03.2023, 15:37
Цитата Сообщение от SmallEvil Посмотреть сообщение
Извини, по указателю ничего не протухает ?
если кодер понимает в каких рамках его объекты рождаются живут и умирают, то нет.

низкоуровневое протухание - это когда объект тупо перестает существовать в физической памяти компа.

но при наличии дисциплинированности лапок за этим легко проследить или тупо не использовать голые указатели.

но есть ещё семантическое протухание, когда фигурка тетриса уже упала и ей уже нельзя управлять, как секундой раннее,
а на управляющий скелет нужно уже навешивать новую фигурку.

Цитата Сообщение от SmallEvil Посмотреть сообщение
ТС в самой шапке это подчеркнул
ТС закрыл уже тему.
то что нужно ТСу знает только сам ТС.

какая мне разница что нужно ТСу щас а что ему будет нужно через час?

очевидно, что в разное время ему будет нужно разное...
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
06.03.2023, 15:45
Цитата Сообщение от XLAT Посмотреть сообщение
но есть ещё семантическое протухание
Не понял. Можно как то подробней или прямо примером ?

Добавлено через 2 минуты
Про тетрис это не метафора никакая ?
Мне нечего сказать. Это детали реализации.
0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
06.03.2023, 16:05
Цитата Сообщение от SmallEvil Посмотреть сообщение
Зачем той же машине наследоваться от колеса ?
это риторический вопрос?

Цитата Сообщение от SmallEvil Посмотреть сообщение
Можно как то подробней или прямо примером ?
геймдизайнер хочет чтобы шарики парили в небе.
а вот кодер закодил так, что они падают на землю.
это называется семантической ошипкой.

когда колесо погнулось об столб, то машина не может ехать.
а если она едет то у тя семантическая ошипка.
колесо протухло - т.е. семантически протухло - его нужно либо заменить, либо машина никуда не едет.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Это детали реализации.
так вот эти самые две детали: ссылка или указатель.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
08.03.2023, 00:24  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
машина(далее как транспортное средство) знает что у неё должны быть колеса,
а вот какие? ей без разницы,
В моём случае будет 1 станок по прокатке нного количества колёс в час. Колёса разных производителей, но обкатать все нужно практически одинаково. Приедет колёс больше - просто поставлю второй станок, нажму кнопку старт на нём и всё

Добавлено через 5 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
что хочет именно "разделить" эти два класса и их роли, избавившись от явной композиции
Не совсем так. Я делю по абстракции (хотя может это и есть композиция в вашем понимании). Мне незачем знать как именно варится рис в мультиварке, когда мне нужна кнопка "сварить рис". Вот и получается что класс А знает как включить нагрев воды, а класс Б знает сколько именно нужно греть воду и что делать после. Но пользователю класс Б выдаёт кнопку "варить рис". Класс А выдаст только кнопки "включить\отключить воду". Гораздо же удобнее работать с абстракцией, чем в кнопке "варить рис" прописывать где какой тумблер должен включиться что б начала греться вода, а ещё и тут же проверять чего там по напряжению и не сгорело ли чего. Проверка напряжений и подача питания - 1 уровень. Включить нагрев воды - 2 уровень. Сварить рис - 3 уровень. Тупо не путаться и не прыгать "из ассемблера в питон" по 10 раз

Добавлено через 2 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
но машины могут быть с разными фичами:
- можно менять колеса.
- нельзя менять колеса. (погнул колесо - выкинь машину)
В целом да. Приходят колеса и должны пройти "прокатку". В целом похожую для всех, но с небольшими отличиями в зависимости от типа колес. А некоторые могут сразу с прокатки в продажу отправляться, некоторые обкатку не пройдут и в утиль

Добавлено через 54 секунды
Короче демогогию можно долго разводить) Желаемое в данный момент времени и под эту конкретную задачу - вы мне дали. А что конкретно там было бы лучше на ваш взгляд - без кода вам не понять. А его я дать не готов
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.03.2023, 01:16
Цитата Сообщение от Laborant666 Посмотреть сообщение
получается что класс А знает как включить нагрев воды, а класс Б знает сколько именно нужно греть воду и что делать после. Но пользователю класс Б выдаёт кнопку "варить рис". Класс А выдаст только кнопки "включить\отключить воду". Гораздо же удобнее работать с абстракцией, чем в кнопке "варить рис" прописывать где какой тумблер должен включиться что б начала греться вода, а ещё и тут же проверять чего там по напряжению и не сгорело ли чего. Проверка напряжений и подача питания - 1 уровень. Включить нагрев воды - 2 уровень. Сварить рис - 3 уровень. Тупо не путаться и не прыгать "из ассемблера в питон" по 10 раз
Laborant666, похоже ваш вопрос более сложен, чем видно из его титульного текста. Тут нужен паттерн или их сочетание. Посмотрите паттерн Command, например.
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
15.03.2023, 22:45  [ТС]
XLAT, чуток пошарился с шаблонами, голова малость распухла, но я понял вашу задумку. Через шаблоны, а конкретно этот шаблон - я смогу во-первых кормить в ваш управляющий класс всю ветку наследников класса А, включая его, а также этот шаблон подойдет для любых других классов, в которых будет метод
Цитата Сообщение от XLAT Посмотреть сообщение
std::vector<std::function<void()>> m
принимающий сигналы (как я понимаю), но сама работа метода будет уже другая. То бишь полиморфизм. Если не секрет - у вас сколько лет опыта? Полагаю коммерческого

Добавлено через 7 минут
Цитата Сообщение от XLAT Посмотреть сообщение
это всё тот же по сути вложенный класс токо описанный отдельно.
Теперь понимаю. По сути я решил извернуться через левое ухо что бы почесать пятку..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2023, 22:45

Как лучше и проще всего создать Com-объект и работать с ним?
Здравствуйте. Нужно работать с оборудованием (контроллеры турникетов и прочего подобного). Это оборудование собирает данные и хранит их у...

Как лучше всего создать таблицу с возможностью переноса строк
Подскажите пожалуйста как лучше всего создать таблицу что б строки переносились и проще всего было распечатать не используя других программ.

Класс со одними стилями заменяется другим классом с другими стилями
window.onload = function(){ document.getElementById('menu-btn').addEventListener('click',changeClass); } function changeClass(){...

Как создать класс-обертку над каким-нибудь другим типом (autoboxing и unboxing)?
Возможно ли такое? Попробовал сделать класс MyInteger, но компилятор всё равно ругается. Добавлено через 5 минут Похоже, что нет:...

Создать класс с одним полем и класс наследник с другим
Создать класс Демо с одним полем Дата(инт) создать конструктор по умолчанию, с параметром копирования. Добавить gete и sete. От класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru