Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22

Как правильно использовать существующий объект одного класса в описании другого класса?

01.09.2021, 23:51. Показов 4998. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я учусь использовать С++ для программирования микроконтроллеров.
И не могу понять, как выстроить правильно логику программы на С++

Расскажу на конкретном примере.
Допустим, я создал класс для обработки данных поступающих с UART (последовательный порт)
Класс представляет собой кольцевой буфер и несколько методов для работы с ним.
Методы самые простые: сохранить байт в буфер, вытащить байт из буфера, проверить буфер на пустоту, очистить буфер и т.д.

На основе класса я создал объект.
И проблема в том что этот объект должен быть только один, а использоваться он должен во всей программе в том числе и в других классах.

Объектом кольцевого буфера я пользуюсь и в прерывании (что бы положить туда пришедший байт) и в программе (например, для проверки его пустоты), а так же в классе для обработки сообщений и в некоторых других классах.
То есть, существующий объект должен использоваться как самостоятельно, так и в составе других классов.

К примеру, я хочу создать класс обработки принимаемых данных и в этом классе мне нужно как-то организовать взаимодействие с уже существующим объектом кольцевого буфера.
Наследование, дружба не вариант, так как при этом создастся еще один объект кольцевого буфера, а это не допустимо.

Получается, что если я создаю класс, где нужно как то взаимодействовать с буфером, то прямо в описании класса мне нужно использовать уже существующий объект.
Но, на сколько я понимаю, описание класса не должно каким-либо образом ссылаться на уже созданный объект.
Или такое допустимо?
Как быть в таких ситуациях?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2021, 23:51
Ответы с готовыми решениями:

Объявление объекта одного класса в описании другого класса
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует. И почему при...

Как отправить объект одного класса в метод другого класса
Начал изучать классы в c++ и в качестве практики решил написать программу которая упрощено симулирует работу завода: #include...

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса. Буду очень...

24
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,361
04.09.2021, 12:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от reti Посмотреть сообщение
нарушаются правила ООП. Без этого программы будут медленными, а памяти и вовсе может не хватить
ерунда, кто такое напел?
0
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22
04.09.2021, 12:52  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Проверку "масла масляного" делать не обязательно, if и так принимает в качестве аргументов true/false. А ещё он принимает 0 / 1/ 10 / 25 / и прочие целые числа (среди них false это 0, остальные true)
Да, это я знаю. Мне так привычнее читать программу. Было несколько раз, когда из-за этого путался в логике при проверки нескольких условий.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
04.09.2021, 13:00
Цитата Сообщение от reti Посмотреть сообщение
Поэтому подумал, что существует какое-то более элегантное решение.
Более элегантное - локальная переменная в main(), а ещё лучше поле класса, экземпляр которого создан локальной переменной в main().

Опять же, указатель на эту переменную придётся раздавать (присвоением указателей напрямую в поля или через вызовы конструкторов/прочих функций) специально, всем кому работа с ней потребуется. Зато сразу становится видно, кому она требуется, а кому нет. И нет недоразумений с порядком инициализации.

Добавлено через 4 минуты
Если создание объекта BufferUart предполагается не сразу, либо предполагается его удаление из памяти раньше завершения программы, то лучше делать ему умный указатель. Это защитит от того, что другие объекты вдруг вызовут функции уже разрушенного/ещё не созданного порта, но от обязанности почистить те объекты от указателей на этот удаляемый порт не освобождает.
0
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22
04.09.2021, 13:00  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
ерунда, кто такое напел?
А вот это уже совсем другая история и для другой ветки форума.
Но, если кратко, то во встраиваемых системах очень часто используются глобальные переменные, иногда оператор goto, достаточно редко используют проверку передаваемых в функцию переменных и прочее. Ну, может не все относится к ООП, но суть думаю, понятна.
Потому что иначе код увеличивается, а быстродействие падает.
Конечно, есть и исключения.
В любом случае, подход к написанию программ для Attiny13 и STM32H4xx должен быть разный
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,361
04.09.2021, 13:04
reti, goto или классы не влияют сами по себе на размер кода и производительность. Зато наличие goto или отсутствие классов - сильно быстро превращает код в протухшую лапшу, где не поможет уже никакая производительность. Такие дела

Добавлено через 1 минуту
ООП - это рекомендация, образ мышления. В Си тоже можно использовать ООП
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2021, 13:04

Можно ли объявлять в описании одного класса объекты другого класса
Здравствуйте! Помогите, пожалуйста, разобраться: я описал класс SignalZakon, а теперь хочу создать объекты этого класса (k, T1 и Т2) в...

Ошибка при попытке использовать объект класса в определении другого класса
Муторное название получилось :scratch: Прошу помощи.... есть созданный класс работы со строкой: "MyString.h" class...

Передача конструктору одного класса объект другого класса
Здравствуйте, кодеры. Столкнулся с проблемой. У меня есть 2 класса Camera и Game и соответствующие конструкторы. main.ccp ...

При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса
Описал первый класс,затем - описал второй класс, используя первый,и когда начал перезагружать оператор для второго класса, вылезла...

Как из одного объекта получить объект другого класса?
Форумчане, подскажите. У меня есть два класса: class Category{ private $id = ''; private $parentId = ''; private...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru