Я пытаюсь создать абстрактный класс, из которого могут быть основаны некоторые другие классы для проекта arduino. Но всякий раз, когда я вызываю метод, который является виртуальным в базе, он просто вызывает базовую реализацию. Код ниже. Может ли кто-нибудь увидеть, что я делаю неправильно?Оверлейные виртуальные методы, которые не называются
#define RTCBASE 0
class RTC_Base {
public:
virtual uint8_t begin(void){ return 0; };
virtual void adjust(const DateTime& dt){};
virtual DateTime now(){ return DateTime(); };
virtual int Type(){ return RTCBASE; };
};
////////////////////////////////////////////////////////////////////////////////
// RTC based on the DS1307 chip connected via I2C and the Wire library
#define DS1307 1
class RTC_DS1307 : public RTC_Base
{
public:
virtual int Type(){
return DS1307;
}
uint8_t begin(void);
void adjust(const DateTime& dt);
uint8_t isrunning(void);
DateTime now();
uint8_t readMemory(uint8_t offset, uint8_t* data, uint8_t length);
uint8_t writeMemory(uint8_t offset, uint8_t* data, uint8_t length);
};
///In Code
RTC_Base RTC = RTC_DS1307();
DateTime dt = RTC.now();
//The above call just returns a blank DateTime();
Возможно, вы испытываете нарезку объектов. – chris
Вы 1) определяете функции в производном классе и 2) не разрезаете, правильно? Также класс не является абстрактным, если в нем нет хотя бы одной чистой виртуальной функции-члена, которой у вас нет. –
Вам нужно будет показать пример вашего использования. Как создается экземпляр класса, как он превращается в базовый класс и как вы вызываете функцию? –