Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848

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

05.03.2023, 00:06. Показов 1741. Ответов 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
Заблокирован
06.03.2023, 15:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
знает что у неё должны быть колеса,
Знать - это одно. Уметь их производить - это другое.
Разные вещи.

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

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

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

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

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

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

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

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

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

очевидно, что в разное время ему будет нужно разное...
0
Заблокирован
06.03.2023, 15:45
Цитата Сообщение от XLAT Посмотреть сообщение
но есть ещё семантическое протухание
Не понял. Можно как то подробней или прямо примером ?

Добавлено через 2 минуты
Про тетрис это не метафора никакая ?
Мне нечего сказать. Это детали реализации.
0
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 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
9005 / 4706 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru