我想創建一個抽象類,其他類可以基於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