Was sind öffentliche Elemente?

In Zeile 7 führen wir ein neues Schlüsselwort ein: public. Dieses Schlüsselwort sagt aus, daß alles darauf folgende auch außerhalb der Klasse verfügbar ist. Da wir unsere zwei Funktionen nach dem Schlüsselwort public definiert haben, sind sie öffentliche Funktionen und können von jeder Funktion aus aufgerufen werden, die im Gültigkeitsbereich dieses Objektes liegt. Das öffnet zwei Löcher in der Mauer, die wir um unsere Daten gebaut haben, um sie zu schützen. Denke aber immer daran, daß die private Variable für die aufrufende Funktion nicht verfügbar ist. Deshalb können wir die Variable nur verwenden, indem wir eine der zwei Funktionen aufrufen, die wir als öffentliche Funktionen definiert haben. Diese Funktionen werden Elementfunktionen genannt, da sie Elemente der Klasse sind.

Nachdem wir zwei Funktionen deklariert haben, müssen wir sie nun auch definieren und angeben, was sie eigentlich tun sollen. In den Zeilen 12 bis 20 tun wir das ganz normal, mit dem einzigen Unterschied, daß den Funktionsnamen der Klassenname, getrennt durch einen zweifachen Doppelpunkt, vorausgeht. Die beiden Funktionsdefinitionen werden die Implementation der Funktionen genannt. Wir müssen den Klassennamen angeben, da es uns freisteht, denselben Funktionsnamen innerhalb mehrerer Klassen zu verwenden und der Compiler wissen muß, welche Funktionsimplementation welcher Klasse zuzuordnen ist.

Abb. 5-3Eine der wichtigsten Erkenntnisse, die wir hier gewinnen sollen, ist jene, daß all die privaten Daten der Klasse innerhalb der Implementationen der Elementfunktionen der Klasse ganz normal für Änderungen zur Verfügung stehen. Innerhalb der Funktionsimplementationen, die ja zur Klasse gehören, kannst Du mit den privaten Daten der Klasse alles anstellen, private Daten anderer Klassen sind allerdings nicht verfügbar. Das ist auch der Grund, warum wir dem Funktionsnamen den Klassennamen voranstellen müssen, wenn wir sie definieren. Bild 5-3 zeigt den Speicher nach dem Abarbeiten der Zeile 30.

Es soll nicht unerwähnt bleiben, daß es natürlich erlaubt ist, private Variablen und Funktionen zu deklarieren und dann im öffentlichen Teil zusätzliche Variablen und Funktionen. In den meisten Fällen werden die Variablen ausschließlich im privaten Teil deklariert und die Funktionen nur im öffentlichen. Manchmal wird man aber Variablen oder Funktionen auch im jeweils anderen Teil deklarieren. Das führt oft zu sehr praktischen Lösungen für spezielle Probleme, im Allgemeinen werden die Elemente aber nur in den erwähnten Teilen verwendet.

In C++ gibt es vier verschiedene Gültigkeitsbereiche für Variablen: global, lokal, in einer Datei und in einer Klasse. Globale Variablen sind überall in der Datei, in der sie definiert werden, und auch in anderen Dateien verfügbar. Lokale Variablen sind auf eine einzelne Funktion beschränkt. Dateien, die außerhalb jedweder Funktion definiert werden, sind im auf ihre Definition folgenden Rest der Datei verfügbar. Eine Variable mit dem Gültigkeitsbereich einer Klasse schließlich ist überall innerhalb des Gültigkeitsbereiches der Klasse, der die Implementationen mit einschließt, verfügbar und nirgends sonst. Die Variable DatenSpeicher ist eine solche Variable.

Du wirst jetzt einigermaßen verwirrt sein, da wir eine Reihe von Regeln aufgestellt haben, ohne je Gründe für diese anzuführen. Lies weiter und Du wirst sehen, daß es doch recht vernünftige und brauchbare Gründe für all das gibt.

(weiter...)