C++-Programmierung/ Eigene Datentypen definieren/ Klassen als Datenelemente einer Klasse

Aus Wikibooks


Analog zu Basistyp-Variablen, können Sie auch Klassenobjekte als Member einer Klasse deklarieren. Dies funktioniert genau so, wie Sie es schon kennen.

class A{
    int zahl;
};

class B{
    A a_objekt;
};

Nun enthält die Klasse B ein Objekt der Klasse A.

Verweise untereinander[Bearbeiten]

Manchmal ist es nötig, dass zwei Klassen einen Verweis auf die jeweils andere enthalten. In diesem Fall muss die Klassendeklaration von der Klassendefinition getrennt werden. Wie auch bei Funktionen gilt, dass jede Definition immer auch eine Deklaration ist und dass Deklarationen beliebig oft gemacht werden können, während Definition nur einmal erfolgen dürfen.

// Deklaration von A
class A;

// Definition von A
class A{
    int zahl;
};

Um ein Klassenobjekt zu deklarieren, muss die gesamte Klassendefinition bekannt sein. Wenn Sie hingegen nur einen Zeiger oder eine Referenz auf ein Klassenobjekt deklarieren möchten, genügt es, wenn die Klasse deklariert wurde.

class A; // Deklaration von A

class B{
    // B enthält eine Referenz auf ein A-Objekt
    A& a_objekt;
};

class A{
    // A enthält ein B-Objekt
    B b_objekt;
};

Falls Ihnen jetzt die Frage im Hinterkopf herumschwirrt, wieso B nur eine Referenz und kein Objekt von A enthält: Die Größe eines Objektes der Klasse A wäre dann

      [Größe von B]+[Größe von restlichen Membern]

Sagen wir mal, die restlichen Member sind 1 groß: Die Größe von B wäre:

      [Größe von A] (B enthält keine weiteren Member)

Wenn Sie jetzt ein wenig herumrechnen, werden Sie feststellen, dass A und B unendlich groß wären, da sie sich selbst unendlich oft enthalten. Dasselbe Problem tritt auf, wenn eine Klasse direkt ein Objekt von sich selbst enthält.