Functions and formatted printing of time and date for RTC8563

Dependencies:   mbed

You are viewing an older revision! See the latest version

Klasse DateString von Date ableiten

Im UML Diagramm ist die Ableitung der Klasse DateString von der Klasse Date, die wiederum von der Klasse RTC8563 abgeleitet ist, dargestellt.

/media/uploads/bulmecisco/date_datestring_inherit_-mobile-.jpg

Die Klasse DateString erbt alle public und protected Membervariable und Methoden der Klasse Date.
Der Code der Header-Datei der Klasse DateString sieht folgendermaßen aus:

#include "mbed.h"
#include "const.h"
#include "string"
#include "Date.h"

#ifndef DATESTRING_H
#define DATESTRING_H

class DateString : public Date
{
private:
    string day;
    string toString(uint8_t value);

public:
    DateString()
    {}
    string GetDay(uint8_t value);
    using Date::GetDay;     // ermöglicht den Aufruf der Methode in Basisklasse Date, sonst Error 165
};
#endif


Der Code der Source-Datei der Klasse DateString sieht folgendermaßen aus:

#include "DateString.h"

string DateString::toString(uint8_t value)
{
    //return std::to_string(value); // C++ version 11
    char buffer[2];
    sprintf (buffer, "%d", value);  // ToString()
    return buffer;
}    
    
string DateString::GetDay(uint8_t value)
{
    day = "Date als String " + toString(value);
    return day;
}

Und in main wird jetzt der komplexe Datentype (Klasse) DateString für die Instanziierung (Erzeugung) des Objketes rtc verwendet:

#include "mbed.h"
#include "const.h"
#include "RTC8563.h"
#include "string"
#include "Date.h"
#include "DateString.h"

Serial pc(USBTX, USBRX);
 
uint8_t year, month, day;

int main()
{
    DateString rtc;  // instanziieren des Objektes rtc
    pc.printf("Anzahl: %d", Date::GetAnzahl()); // Zugriff auf stat. Methode über Klassenname
    pc.printf("Anzahl: %d", rtc.GetAnzahl());   // Zugriff auf stat. Methode über Objektvariable
 
    while(1) {
        
        pc.printf("Date: %i\n", rtc.GetDay());
        pc.printf("Date: %s\n", rtc.GetDay(rtc.GetDay()));
        wait(1);
    }
}

Bei der Übersetzung kommt die Warning in Zeile 21 für printf:
Warning: Non-POD class type passed through ellipsis in "main.cpp", Line: 21, Col: 33
hat nur die Bedeutung, dass der Datentype (hier ein Objekt - komplexer Datentype) nicht mit "C" kompatibel ist.
POD (Plain Old Data)


All wikipages