Das Wort Klasse bezeichnet einen neuen, benutzerdefinierten Datentyp.
Die Deklaration einer Klasse wird durch die
Schlüsselwörter struct
oder class
eingeleitet.
Das Schlüsselwort struct
stammt dabei noch aus C-Zeiten und
zeigt, dass sich dieser Teil der Objektorientierung von
C++ historisch u.a. aus einer Verallgemeinerung des Begriffs der Struktur
entwickelt hat.
Von C erben Klassen daher zunächst einmal alle Eigenschaften, die auch Strukturen zukommen. Klassen sind daher ``Behälter'' für oder Konglomerate von verschiedenen Datenelementen, die natürlich selber wiederum Strukturen (Klassen) sein können:
class Person { public: int age; std::string name; // class from C++ standard library };
Der hinter struct
oder class
angegebene Name wird vom
Compiler wie ein neuer Typ behandelt. Man kann etwa Variablen dieses
neuen Typs deklarieren und spricht dann von Instanzen einer Klasse.
Der Compiler stellt die nötige Funktionalität bereit, um solche
Instanzen aufeinander zuzuweisen, sie an Unterprogramme zu übergeben
oder aus Unterprogrammen zurückzugeben, er stellt für jede Instanz
Speicherplatz bereit und sorgt dafür, dass der Speicher wieder
freigegeben wird, wenn der Programmfluss den Existenzbereich einer
Variable verlässt (die Variable geht out of scope).
Die Schlüsselworte class
und struct
haben weitgehend
gleiche Bedeutung, unterscheiden sich aber dadurch, daß Datenelemente
in Strukturen allgemein zugänglich (public
),
die in class
es jedoch zunächst private
sind.
Mittels der Operatoren .
und ->
greift man auf die Elemente
solcher Strukturen zu. Der ->
Operator ist eine Abkürzung für die
Kombination aus *
und .
:
void f(){ Person p; p.age = 27; p.name = "Winnetou"; }
Der mit einer Instanz einer Struktur oder Klasse
assoziierte Speicherplatz richtet sich nach dem
Speicherbedarf der einzelnen Datenelemente. Mittels
sizeof()
läßt sich der benötigte Platz in Einheiten der
Größe eines char
bestimmen. Ein Compiler kann,
muss aber nicht die Datenelemente in der Reihenfolge ihrer
Deklaration in der Struktur im Speicher ablegen. Ebenso kann die Größe
einer Struktur die Summe der Größe ihrer Elemente überschreiten, wenn
der Compiler z.B. aus Gründen eines effizienten
Speicherzugriffs die Datenelemente immer auf
Speicherworten beginnen lässt. Weiterhin darf aus Gründen, die mit den
Speicherzugriffen auf Felder zusammenhängen, die Größe einer Struktur
diejenige eines char
nicht unterschreiten, selbst wenn
sie, wie das bei Klassen manchmal vorkommt, keine Datenelemente
enthält.