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

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

05.03.2023, 00:06. Показов 1974. Ответов 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru