Как создать класс матрицы?

poty

★★★★★★✩
19 Фев 2020
3,237
942
@Kir, смысла создания класса для помещения туда несвязанных объектов нет никакого. Независимо от метода получения этого класса.
Что касается двигателя и машины... А от чего будет наследоваться класс моноколеса? А велосипеда?
А если описывается функциональность? От чего что наследуется?
Вы мыслите слишком узко, зациклились на ООП любой ценой и пытаетесь это навязать. ТС-у не требуется класса, у него нет обьектно-ориентированной картины реализации, а всё, что нужно реализуется спокойно простыми методами, к тому же влезет в память МП.
 

SergejEU

★★✩✩✩✩✩
16 Сен 2020
120
73
@Kir, Давайте сначала отделим конкретную реализацию, основанную на конкретном языке (в данном случае С++) от парадигмы ООП. С точки зрения парадигмы ООП может быть вы и правы. Но вот с точки зрения реализации чистые методы ООП не всегда самый лучший и эффективный подход. Методы реализации на С++ дают нам бОльшую гибкость, чем другие языки. (не будем обсуждать, хорошо это или плохо, не суть) В С++ возможно: Множественное наследование и Виртуальное наследование, кроме того, есть абстрактные, дружественные, Виртуальные базовые классы и еще многое другое. Эти методы позволяют прекрасно сочетать иерархию классов с агрегированием (делегированием) данных. Пример - Qt. И вообще, от наследования в С++ никак не уйти, даже при создании/использовании интерфейсов. При использовании интерфейсов в СИ, уже как бы завуалировано наследование. Таков С++. Композиция не всегда приемлема с точки зрения эфективного использования ресурсов, прозрачности и легкости чтения кода.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
251
42
Пример отличный, явно показывает всю абсурдность попытки создать обобщённую сущность, используя наследование от конкретной реализации.
нет, пример не отличный, ибо не имеет здравого смысла. Абстракции не должны зависить от деталей, а в вашем примере так оно и есть, поэтому это бред.
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
Избыточное цитирование. Отредактируй или сообщение будет удалено
нет, пример не отличный, ибо не имеет здравого смысла. Абстракции не должны зависить от деталей, а в вашем примере так оно и есть, поэтому это бред.
Похоже вы даже не дочитали предложение до конца.
Вы говорите,
Абстракции не должны зависить от деталей
а теперь вернемся к совету, что был выше

@Artem987,
воспользуйтесь же технологией ООП!
1. Правильно наследуйте класс от родительского Max72xxPanel;
C++:
class Matrix : public Max72xxPanel
{
    ...
};
2. Используйте вложенные конструкторы класса;
3. Все методы и поля родительского класса Max72xxPanel акромя private будут вам доступны из коробки.
4. Добавляйте по необходимости свои методы или переопредляйте наследуемые.
и что мы видим, ровно тот самый абсурдный пример, когда хотим построить автомобиль (Matrix), унаследовав от двигателя (Max72xxPanel).

PS: Модераторы скорее всего тему почистят, поэтому если кто-то хочет пообщаться за ООП, обсудить что-то конкретное, модераторы любезно создали специальную тему, а продолжать тут смысла не вижу, так как беседа начинает терять контекст вопроса, и переходить в состояние отставивания своего мнения, к тому же, на вопрос о причине ошибки, ответ был дан, и, более чем, развернуто предупрежден о последствиях предлагаемого большинством совета сделать так - class Matrix : public Max72xxPanel, который, между прочим, не решил бы проблему ошибки компиляции.
 

SergejEU

★★✩✩✩✩✩
16 Сен 2020
120
73
который, между прочим, не решил бы проблему ошибки компиляции.
только вот давайте не будем передергивать и врать. В моём посте под пунктом 2. есть указание на решение проблемы. ТС должел сам сделать свои домашнии уроки. Так было бы методически правильно.

К модераторам. Пожайлуста, закройте тему! ТС получил свои ответы. А дискуссия о толковании принципов ООП эскалирует в направлении религиозного мракобесия..
 

Artem987

✩✩✩✩✩✩✩
2 Апр 2022
8
0
@Kir, да, это то что нужно, спасибо большое, можете ещё подсказать, как исправить проблему объект rgb_line 1649768978440.png
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
вы хидер Фастледа не забыли в файл матрицы добавить?
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
@Kir,ОК, но CRGB же класс, что с ним не так ?Посмотреть вложение 35821
Компилятор пишет: нет совпадения для вызова функции с сигнатурой (CRGB&, int&)
Если обратиться к исходнику, то там действительно нет такой сигнатуры. CRGB должен передаваться как указатель, а не ссылка.
Вы, кстати, создали всего 1 диод, и если NUM_LEDS > 1, то вас ожидает UB, посмотрите внимательнее простейший пример.
 

Artem987

✩✩✩✩✩✩✩
2 Апр 2022
8
0
@Kir, как я понял адресные ленты хранятся в классе CRGB, а мне нужно чтобы при инициализации класса Address_line в этом объекте создавался класс CRGB ленты, чтобы потом к этой ленте можно было так же менять эффекты(сначала не тот скрин загрузил)1650052998577.png
 
Изменено: