Initialisierungsliste

Initialisierungsliste

Die Initialisierungsliste ist eine Spezialität der Programmiersprache C++, sie kommt ausschließlich in Konstruktoren vor und hat die Aufgabe, die Konstruktion von Vorfahren-Klassen, eingebetteten Elementen und Referenzen zu regeln.

Hintergrund

Im Gegensatz zu C, wo man eine Variable deklarieren kann, ohne sich zunächst um ihre Initialisierung zu kümmern, gibt es in C++ Fälle, in denen eine sofortige Initialisierung nötig ist:

  • In C++ ist es möglich, Variablen per Deklaration unveränderlich zu machen. Das geschieht durch Voranstellen des Schlüsselwortes const. Man muss einer solchen Variable allerdings mit der Deklaration bereits einen Wert zuweisen.
  • Referenzen nennt man in C++ – vereinfacht ausgedrückt – Zeiger, die nie null sein können, ihnen muss bereits zum Zeitpunkt der Deklaration ein Objekt oder eine bereits bestehende Referenz zugewiesen werden.
  • Klassen können von ihrem Entwickler so gestaltet werden, dass sie zur Konstruktion von Objekten Initialisierungswerte übergeben bekommen müssen. Ein Beispiel wäre eine Klasse Bruch, bei der man von Anfang an sicherstellen will, dass im Nenner keine Null steht, das kann in C++ mittels Konstruktor (unter Verwendung von Exceptions) erreicht werden.

Finden solch restriktive Deklarationen in einer Klassendefinition statt (Vererbungsbeziehung, Element-Deklaration), wird die Definition der entsprechenden Initialisierungswerte auf den Konstruktionszeitpunkt verschoben (es muss ein Konstruktor definiert werden). Vor dem Beginn des Konstruktor-Körpers werden Initialisierungen von Basisklassen und konstanten bzw. Referenzelementen in Form einer Liste vorgenommen.

Beispiel

Die Klasse A verfügt über

  • eine Basisklasse B (die einen Konstruktor definiert)
  • ein Element der Klasse E (die einen Konstruktor definiert)
  • ein konstantes Element c
  • ein Referenz-Element r

die über die Initialisierungsliste – im Codebeispiel gelb hinterlegt – mit Initialisierungswerten versorgt werden müssen.

class B
{
public:
    // Der Compiler ekennt automatisch, dass mit b(b) die Klassenvariable b
    //  mit dem Parameter b initialisiert werden soll. Dieser Mechanismus
    //  heißt argument dependent name lookup.
    B( int b ) : b( b ) {}
 
    int b;
};
 
class E
{
public:
        E( int ein_e ) : e( ein_e ) {}
 
    int e;
};
 
class A : public B
{
public:
    A( int b, int ein_e, int ein_c, int& ein_r ) : B(b), e(ein_e), c(ein_c), r(ein_r) {} 
    E e;
    const int c;
    int& r;
};

Wikimedia Foundation.

Игры ⚽ Нужен реферат?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Constructor — Als Konstruktoren und Destruktoren werden in der Programmierung spezielle Prozeduren bezeichnet, die beim Erzeugen und Zerstören von Objekten oder Variablen aufgerufen werden. Konstruktoren bringen die Objekte in einen definierten Anfangszustand …   Deutsch Wikipedia

  • Destruktor — Als Konstruktoren und Destruktoren werden in der Programmierung spezielle Prozeduren bezeichnet, die beim Erzeugen und Zerstören von Objekten oder Variablen aufgerufen werden. Konstruktoren bringen die Objekte in einen definierten Anfangszustand …   Deutsch Wikipedia

  • Konstruktor — Als Konstruktoren und Destruktoren werden in der Programmierung spezielle Prozeduren bezeichnet, die beim Erzeugen und Zerstören von Objekten oder Variablen aufgerufen werden. Konstruktoren bringen die Objekte in einen definierten Anfangszustand …   Deutsch Wikipedia

  • Konstruktoren und Destruktoren — Als Konstruktoren und Destruktoren (aus dem Englischen auch kurz ctor bzw. dtor genannt) werden in der Programmierung spezielle Prozeduren bzw. Methoden bezeichnet, die beim Erzeugen und Auflösen von Objekten und Variablen aufgerufen werden.… …   Deutsch Wikipedia

  • Initialisierung — (vgl. englisch to initialize) bezeichnet: den Teil des Boot oder Ladevorgangs eines Computerprogramms, in dem der zur Ausführung benötigte Speicherplatz für das Programm reserviert und mit Startwerten gefüllt wird, siehe… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”