HIMBED_3AHELI / Mbed 2 deprecated rtc_func

Dependencies:   mbed

You are viewing an older revision! See the latest version

Grundlagen der Vererbung

Inhalt

Klassenableitung

Die Vererbung besagt, dass eine neu zu definierende Klasse die Memerbervariablen und Methoden einer anderen Klasse erben kann. Z.B. besitzt eine Anwendung mehrere Klassen, die eine gemeinsame Struktur aufweisen und nur durch spezielle Methoden und Memerbervariablen auf den jeweiligen Anwendungsfall angepasst sind, können diese Klassen die gemeinsame Funktionalität in einer sogenannten Basisklasse zusammenfassen. Von der Basisklasse können die speziellen Klassen abgeleitet und die speziellen Methoden und Memerbervariablen hinzu gefügt werden, oder es können die Funktionalitäten der geerbten Methoden verändert werden.
Syntax:

class Abgeleitet_Klassenname: public Basis_Klassenname
{ 
	// Deklarationen
};

Bei einer public Ableitung werden die Zugriffsrechte aus der Basisklasse 1:1 in die abgeleitete Klasse übernommen. Damit kann dann auch über ein Objekt der abgeleiteten Klasse auf die public Member der Basisklasse zugegriffen werden.

Konstruktor

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. 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.

Weitere Inos

Siehe Verbung und Polymorphie


Siehe auch Bertl WIKI


All wikipages