Есть необходимость (ну или просто желание) сделать свою библиотеку на основе какой либо существующей. Возьмем, например, всеми любимый модуль nRF24. За основу берем библиотеки RF24.h и RF24Network.h Создаю тестовый проект, добавляю в проект новые файлы nrf.h и nrf.cpp, добавляю туда #include <RF24.h>, #include <RF24Network.h> Конструктор класса RF24 требует в качестве параметров _cepin и _cspin. А конструктор класса RF24Network требует ссылку на созданный объект RF24. Далее сам вопрос собственно: Как мне в коде своей библиотки описать переменные (объекты) для RF24 и RF24Network, если _cepin и _cspin я смогу передать только в конструктор своей библиотеки или даже в метод begin библиотеки? Я конечно могу в библиотеки RF24.h и RF24Network.h добавить новый конструктор без параметров, после чего добавить туда соответствующие методы инициализации с передачей нужных параметров, но хотелось бы обойтись без переделки стандартных библиотек.
Передать их из конструктора своего класса в конструктор базового: Код (C++): class MyClass : public RF24 { public: MyClass(byte cepin, byte cspin) : RF24(cepin, cspin) { } };
Если использовать не наследование, а композицию, то примерно так: Код (C++): class MyLibrary { public: MyLibrary(uint8_t _cepin, uint8_t _cspin); ~MyLibrary(); private: RF24 rf24; }; Код (C++): MyLibrary::MyLibrary(uint8_t _cepin, uint8_t _cspin) : rf24(_cepin, _cspin) { } MyLibrary::~MyLibrary() { }
А для RF24Network, которая объявляется как Код (C++): RF24 radio(_ce, _csn); RF24Network network(radio); Ведь я хочу в своей библиотеке объединить и ту и другую.
Композиция: Код (C++): class MyLibrary { public: MyLibrary(uint8_t _cepin, uint8_t _cspin); ~MyLibrary(); private: RF24 rf24; RF24Network rf24Network; }; Код (C++): MyLibrary::MyLibrary(uint8_t _cepin, uint8_t _cspin) : rf24(_cepin, _cspin), rf24Network(rf24) { } MyLibrary::~MyLibrary() { }
А насколько актуален деструктор в контексте Ардуино? Ведь тут создаем объект, который живет, пока не ребутнемся.
Вопрос скорее холиварный. По моему личному мнению в классах для Arduino на базе AVR деструктор скорее не нужен. Но есть привычка... Да и мастер создания классов в Eclipse сразу генерирует заготовки для конструктора и деструктора.