next up previous contents
Next: Elementfunktionen Up: Klassen Previous: Klassen

Datenelemente

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


next up previous contents
Next: Elementfunktionen Up: Klassen Previous: Klassen
© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002