Я использую Arduino, и я пытаюсь создать пользовательский Serial Class, который отфильтровывает специальные данные. Поэтому я хочу наследовать HardwareSerial для доступа к его защищенному буферу RX.Наследование класса со ссылками в конструкторе
Я могу себе представить из трех решений: наследуйте класс этого буфера
Создать экземпляр этого класса в моем классе, но тогда я не знаю, как получить доступ к защищенному буфера
Скопировать все класса или просто наследуйте несколько функций для изменения всех функций. может быть лучшим решением.
Что работает:
.h:
extern HardwareSerial Serialk;
.cpp:
HardwareSerial Serialk(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0);
Serialk._tx_udr_empty_irq();
Но я не могу наследовать класс вроде этого:
class CUSB : public HardwareSerial (&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){
[..] }
Это бросает ошибки, как это:
D:\Arduino\sketchbook\libraries\USB/USB.h:36:50: error: invalid type in declaration before ',' token class CUSB : public HardwareSerial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){ ^ D:\Arduino\sketchbook\libraries\USB/USB.h:36:50: error: 'UBRRL' declared as reference but not initialized D:\Arduino\sketchbook\libraries\USB/USB.h:36:53: error: 'UCSRA' declared as reference but not initialized class CUSB : public HardwareSerial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){
Удивительный (рабочий)! Есть ли способ перезаписать виртуальные функции, но все же использовать его как другой экземпляр? Так что я могу сделать USB.Serial.print() ;? Должен ли я создать другой класс, например CUSBSerial, и создать экземпляр в моем классе CUSB или есть более простой способ? – 2014-08-28 14:14:35
Если вы имеете в виду вызов реализации базы переопределенного виртуального метода, вы можете сделать это: 'class CUSB: public HardwareSerial {virtual void foo() override {HardwareSerial :: foo(); }}; '. Вам нужно будет уточнить, имеете ли вы что-то еще. – Zoomulator