我想创建一个抽象类,其他类可以基于arduino项目。但是,每当我调用一个基本虚拟的方法时,它就会调用基本实现。下面的代码。任何人都可以看到我做错了什么?Overriden虚拟方法不被调用
#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 2013-03-12 04:09:34
你是1)在派生类中定义函数和2)不切片,对吧?另外一个类不是抽象的,除非它至少有一个纯粹的虚拟成员函数,而你自己并不是。 – 2013-03-12 04:09:42
您必须展示您的使用情况。如何创建类实例,如何将其转换为基类,以及如何调用该函数? – 2013-03-12 04:11:18