![]() |
![]() |
Eine Klasse erstellen
|
G.Eichelsdörfer
Staatliche Technikerschule Weilburg |
Um eine Klasse erstellen zu können, müssen Sie deren potentielle Bestandteile kennen. Dies soll hier an der Mutation des DoubleArray-Structs zur DoubleArray-Klasse gezeigt werden. Wenn in einigen Schritten eine brauchbare Klasse entstanden ist, kann nach dieser Klasse (als Typ) ein Objekt (als Variable) angelegt werden. Fangen wir erst einmal klein an. Eine Klasse baut man zunächst wie einen C-Struct zusammen. Das Schlüsselwort struct wird dabei durch class ersetzt.
Arbeitsbereich: klassen, Projekt: doublearray
class DoubleArray
{
};
Diese Klasse ist noch leer, das muss und wird sich ändern. Bauen wir zuerst die Komponenten aus dem Struct ein! In einer Klasse nennt man Datenkomponenten Eigenschaften oder Attribute.
class DoubleArray
{
int Size, Capacity;
double Values[100];
};
Unsere Klasse besitzt nun drei Attribute, auf die, anders als in einem Struct, von außerhalb der Klasse nicht zugegriffen werden kann. Sie liegen im so genannten private-Bereich der Klasse. Dieser private-Bereich ist bei einer Klasse implizit voreingestellt. Er kann und sollte aber auch explizit angegeben werden:
class DoubleArray
{
private:
int Size, Capacity;
double Values[100];
};
Man sagt auch: Die Daten einer Klasse sind gekapselt, was bedeutet, dass auf deren Daten nicht von außerhalb
der Klasse bzw. eines Objektes dieser Klasse zugegriffen werden kann.
Was aber sollen diese Daten, wenn es darauf keinen Zugriff gibt?
Dazu sind innerhalb der Klasse geeignete Kommunikationsschnittstellen bereit zu stellen, über die von außen mit einem Objekt dieser Klasse kommuniziert werden kann. Denken wir zunächst an die Funktion append aus der ursprünglichen DoubleArray-Aufgabe. Diese Funktion kann ziemlich einfach in unsere Klasse eingebaut werden. Dort wird sie dann zu einer Methode oder memberfunction (C++-spezifischer Name). Damit sie von außerhalb der Klasse aufgerufen werden kann, muss sie im öffentlichen (public) Bereich der Klasse angesiedelt werden.
class DoubleArray
{
public:
bool append(DoubleArray& Da, double Val)
{
bool valid = Da.Size < Da.Capacity;
if(valid) Da.Values[Da.Size++] = Val;
return valid;
}
private:
int Size, Capacity;
double Values[100];
};
Halt! Falsch.
Die Daten, auf die append() zugreifen soll, liegen als Attribute in einem Objekt unserer Klasse und sind nicht
als Parameter zu importieren. Wir streichen also den ersten Parameter. Im selben Zug ist auch der Parametername mitsamt
Punkt im Methodenrumpf zu entfernen. Weil Methode und Attribute innerhalb desselben Objektes liegen werden, gelingt
der Zugriff durch einfache Nennung des Attributnamens. Der Quelltext wird also einfacher, eine Gegenleistung für unsere
zusätzlichen Bemühungen ;-)