Functions and formatted printing of time and date for RTC8563

Dependencies:   mbed

Konstruktor und Vererbung

Inhalt

Die abgeleitete Klasse erbt im Prinzip alle Member der Basisklasse, außer die Konstruktoren und den Destruktor - auch nicht die privaten Member und friends. Bevor der Konstruktor einer abgeleiteten Klasse ausgeführt wird, wird immer der Konstruktor der Basisklasse gestartet. Umgekehrt ist es beim Destruktor. Hier wird der Destruktor der Basisklasse zuletzt aufgerufen. Dieses Verhalten ist logisch, da abgeleitete Klassen auf den Eigenschaften der Basisklassen aufbauen. Entsprechend muss das Basisobjekt konstruiert sein, bevor der Konstruktor der abgeleiteten Klasse aufgerufen wird. Entsprechendes gilt beim Destruktor. Der Destruktor der Basisklasse muss zuletzt aufgerufen werden, damit das Basisobjekt nicht bereits zerstört ist, wenn die abgeleitete Klasse noch versucht, die Erweiterungen freizugeben.

Parameterunterschiede der Konstruktoren (Initialisierer)
Wenn von einer Basisklasse kein Konstruktor vorhanden ist, der die gleichen Parameter hat wie der Konstruktor der abgeleitet Klasse, dann muss der Konstruktor der Basisklasse explizit aufgerufen werden. Das kann mit einen Initialisierer ähnlich der Initialisierungslisten erfolgen (See how it works: Klasse mit Konstruktor und Initilisierungsliste).
Im folgenden Beispiel hat die Basisklasse lediglich einen Konstruktor, der einen Integer-Wert erwartet. Dadurch gibt es keinen Standardkonstruktor. Die abgeleitete Klasse hat aber einen Standardkonstruktor, was einen Compiler-Fehler zur Folge hätte, weil er kein Gegenstück in der Basisklasse findet. Damit dies nicht geschieht, wird der Konstruktor der Basisklasse explizit als Initialisierer aufgerufen. Bei Aufruf des Standardkonstruktors der abgeleiteten Klasse wird der Basiskonstruktor mit dem Parameter 5 aufgerufen.

class Basis
{
public:
    Basis(int i); // Kein Standardkonstruktor
};

class Abgeleitet : public Basis
{
public:
    Abgeleitet() : Basis(5) // Basiskonstruktor aufrufen
    {
        ...
    }
};

Das Anlegen eines Objekts vom Typ "Abgeleitet" ruft den Standardkonstruktor auf. Ohne den Initialisierer würde der Compiler den Standardkonstruktor von "Basis" aufrufen. Den gibt es allerdings nicht - Compiler-Fehler. Durch den Initialisierer wird der Konstruktor mit dem Integer-Parameter explizit aufgerufen, bevor die Initialisierung von "Abgeleitet" beginnt.


See how it works: Parametrisierte Konstruktoren


Aufgabe

  • Erweitern Sie die Klassenhierarchie um einen Standard Konstrutkor und parametrisierte Konstruktoren, sodass bei der Erzeugung eines Objektes der RTC mit der übergebenen Datum/Zeit initiallisiert wird bzw. im Standard Konstruktor der 1.1.2000 verwendet wird.

Klasse DateString von Date ableiten


All wikipages