Elemente der Klasse
Die Klassen ratio und Zeile enthalten ausschließlich sogenannte Objektelemente. Dies sind Elemente, die als Daten in jedem Objekt wiederholt werden und als Methoden für alle Objekte verwendet werden können.
Es gibt nun aber Fragestellungen, die mit diesem Vorgehen nicht zu lösen sind. Stellen Sie sich eine Klasse vor, deren Objekte sehr häufig dynamisch angelegt werden. Ein Programmierer will nun wissen, wie viele Objekte zu einem gegebenen Zeitpunkt existieren. Es wäre dazu nützlich, wenn es einen Zähler für die ganze Klasse gäbe, in dem die Anzahl der momentan lebenden Objekte mitgeführt wird. Dazu müßte man aber eine Klasseneigenschaft definieren können. Und das ist möglich.
Elemente, die nur der Klasse, aber nicht zu Objekten gehören, werden mit dem Schlüsselwort static gekennzeichnet. Und damit gibt es wieder eine Bedeutung mehr für dieses Schlüsselwort. Eigenschaften, also Daten, die mit static in einer Klasse deklariert werden, müssen an anderer Stelle noch definiert werden. Sie gibt es in der Klasse nur einmal und unabhängig von der Existenz der Objekte. Die Methoden der Klasse erhalten in der Deklaration ebenfalls ein static als Attribut. Bei Methoden bedeutet das, daß diese Methode nur auf die Klasseneigenschaften zugreifen darf, nicht aber auf die Objekteigenschaften.
|
Elemente der Klasse Seite 143 |
Alle anderen Methoden haben auf Klassenelemente (sowohl Eigenschaften wie auch Methoden) die gleiche Zugriffsmöglichkeit wie auf Objektelemente.
In der neuen Definition der Klasse ratio wurde von der Möglichkeit Gebrauch gemacht, inline-Makros zu definieren. Außerdem gibt es in der Zeile 11 eine Eigenschaft der Klasse. Die Methode delta() gehört wie die Methode GibZaehler() der Klasse. Beide dürfen nur auf Eigenschaften der Klasse zugreifen. In unserem Fall ist dies nur der zaehler.
|
Seite 144 Einsteigerseminar C++ |
In der Klassendefinition wurde auch ein Destruktor aufgenommen. Er ruft die Klassenmethode delta() mit -1" auf. Zusammen mit dem Konstruktor wird die Klasseneigenschaft zaehler" bei jedem Anlegen und Entfernen von Objekten mitgeführt.
In der Definition der Klasse (Bild 11-2) haben wir alle Methoden der Klasse wegen ihrer Kürze als inline-Makros geschrieben. In der Implementierung definieren wir nun die Klasseneigenschaft zaehler (Zeile 5). Dazu wird in einer Variablendefinition dem Namen der Bereichsoperator und der Klassenname vorangestellt. Klasseneigenschaften müssen initialisiert werden.
Im Hauptprogramm (Bild 11-4) werden drei Objekte global angelegt. Innerhalb von main() wird ein weiteres Objekt dynamisch angelegt und dessen Adresse in einem Zeiger abgelegt. Das Programm geht davon aus, daß immer noch Platz für ein Objekt sein sollte und verzichtet auf eine Fehlerüberprüfung.
|
Elemente der Klasse Seite 145 |
Nach der Ausgabe der Anzahl der momentan vorhandenen Objekte löschen wir das dynamisch angelegte. Der Destruktor erniedrigt den Zähler der Klasse um eins. Die nächste Ausgabe des Zählers wird den verminderten Stand ergeben.
Beachten Sie den Bereichsoperator beim Aufruf von GibZaehler(). Da die Methode nicht für ein bestimmtes Objekt aufgerufen wird, müssen wir durch die Angabe der Klasse dem Compiler mitteilen, daß es sich um eine Methode und nicht um eine normale C-Funktion handelt.
Die Klassenmethoden unterscheiden sich von Objektmethoden dadurch, daß sie keine Bindung besitzen. Damit gibt es in Klassenmethoden this nicht. Die Bindung an ein Objekt ist auch nicht notwendig oder erforderlich, da sie sowieso nur auf die Eigenschaften der Klasse zugreifen dürfen.
|
Seite 146 Einsteigerseminar C++ |
Statt des Klassennamens kann man natürlich auch die gewohnte Schreibweise benutzen und ein Objekt voranstellen. Dies führt aber nicht zur Bindung und macht den Code schwerer lesbar.
Die Bildschirmausgabe sieht wie folgt aus.
Mit Klassenmethoden kann man neben den angeführten Möglichkeiten auch die Operatoren "new" und delete überlagern. Dann gelten diese Operatoren nur für die Klasse, in der sie überlagert wurden.
Hinweise zur Weiterarbeit
1) Eine der großen Anwendungen für Objektorientierte Programmierung sind die graphischen Oberflächen. Nennen Sie einige Eigenschaften, die für alle Fenster nur einmal vorhanden sind.
2) Richten Sie in den Klassen "ratio" und "Zeile" jeweils Zeiger auf den Namen der Klasse und der Version ein. Schreiben Sie für die beiden Klassen die Zugriffsfunktionen.
|
Elemente der Klasse Seite 147 |
Im nächsten Kapitel
Im folgenden Kapitel wenden wir uns der nächsten Grundidee der OOP zu: der Wiederverwendbarkeit von Programmteilen. Dabei werden wir neue Klassen mit der Hilfe schon bestehender aufbauen. Wieder wird dazu die Klasse die Grundlage bilden.
|
Seite 148 Einsteigerseminar C++ |