|
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22
|
|
Как правильно использовать существующий объект одного класса в описании другого класса?01.09.2021, 23:51. Показов 4998. Ответов 24
Метки нет (Все метки)
Я учусь использовать С++ для программирования микроконтроллеров.
И не могу понять, как выстроить правильно логику программы на С++ Расскажу на конкретном примере. Допустим, я создал класс для обработки данных поступающих с UART (последовательный порт) Класс представляет собой кольцевой буфер и несколько методов для работы с ним. Методы самые простые: сохранить байт в буфер, вытащить байт из буфера, проверить буфер на пустоту, очистить буфер и т.д. На основе класса я создал объект. И проблема в том что этот объект должен быть только один, а использоваться он должен во всей программе в том числе и в других классах. Объектом кольцевого буфера я пользуюсь и в прерывании (что бы положить туда пришедший байт) и в программе (например, для проверки его пустоты), а так же в классе для обработки сообщений и в некоторых других классах. То есть, существующий объект должен использоваться как самостоятельно, так и в составе других классов. К примеру, я хочу создать класс обработки принимаемых данных и в этом классе мне нужно как-то организовать взаимодействие с уже существующим объектом кольцевого буфера. Наследование, дружба не вариант, так как при этом создастся еще один объект кольцевого буфера, а это не допустимо. Получается, что если я создаю класс, где нужно как то взаимодействовать с буфером, то прямо в описании класса мне нужно использовать уже существующий объект. Но, на сколько я понимаю, описание класса не должно каким-либо образом ссылаться на уже созданный объект. Или такое допустимо? Как быть в таких ситуациях?
0
|
|
| 01.09.2021, 23:51 | |
|
Ответы с готовыми решениями:
24
Объявление объекта одного класса в описании другого класса
|
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,361
|
|
| 04.09.2021, 12:51 | |
|
0
|
|
|
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22
|
||
| 04.09.2021, 12:52 [ТС] | ||
|
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 04.09.2021, 13:00 | ||
|
Опять же, указатель на эту переменную придётся раздавать (присвоением указателей напрямую в поля или через вызовы конструкторов/прочих функций) специально, всем кому работа с ней потребуется. Зато сразу становится видно, кому она требуется, а кому нет. И нет недоразумений с порядком инициализации. Добавлено через 4 минуты Если создание объекта BufferUart предполагается не сразу, либо предполагается его удаление из памяти раньше завершения программы, то лучше делать ему умный указатель. Это защитит от того, что другие объекты вдруг вызовут функции уже разрушенного/ещё не созданного порта, но от обязанности почистить те объекты от указателей на этот удаляемый порт не освобождает.
0
|
||
|
6 / 6 / 1
Регистрация: 13.12.2017
Сообщений: 22
|
||
| 04.09.2021, 13:00 [ТС] | ||
|
Но, если кратко, то во встраиваемых системах очень часто используются глобальные переменные, иногда оператор goto, достаточно редко используют проверку передаваемых в функцию переменных и прочее. Ну, может не все относится к ООП, но суть думаю, понятна. Потому что иначе код увеличивается, а быстродействие падает. Конечно, есть и исключения. В любом случае, подход к написанию программ для Attiny13 и STM32H4xx должен быть разный
0
|
||
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,361
|
|
| 04.09.2021, 13:04 | |
|
reti, goto или классы не влияют сами по себе на размер кода и производительность. Зато наличие goto или отсутствие классов - сильно быстро превращает код в протухшую лапшу, где не поможет уже никакая производительность. Такие дела
Добавлено через 1 минуту ООП - это рекомендация, образ мышления. В Си тоже можно использовать ООП
0
|
|
| 04.09.2021, 13:04 | |
|
Можно ли объявлять в описании одного класса объекты другого класса Ошибка при попытке использовать объект класса в определении другого класса Передача конструктору одного класса объект другого класса При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса Как из одного объекта получить объект другого класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера 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
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|