====== Datenelemente (Eigenschaften) und Elementfunktionen (Methoden) ======
In der Programmiersprache C können mit **struct** nur **Datenelemente** zusammengefasst werden. Eine Funktion, die zu einer Klasse gehört, wird als **Elementfunktion (Methode)** bezeichnet.
**Beispiel 1a:** Die Klasse C2DPunkt soll einen zweidimensionalen Punkt darstellen. Sie fasst dessen Koordinaten x und y (Datenelemente) sowie die Funktionen //Init, toStr// und //show// zusammen.
class C2DPunkt
{double x,y;
void Init(double x_, double y_);
AnsiString toStr();
void show();
};
===== Definition von Methoden =====
Eine Elementfunktion kann **innerhalb** oder **außerhalb** der Klasse definiert werden. Wenn sie außerhalb der Klasse definiert wird, gibt man vor ihrem Namen den Namen der Klasse und den Bereichsoperator „**::**“ an. Sie muss dann zuvor in der Klasse durch die Angabe ihres Prototyps deklariert werden.
**Beispiel 1b:** Nach den Deklarationen des letzten Beispiels können die Funktionen für die Klasse C2DPunkt folgendermaßen definiert werden:
void C2DPunkt::Init(double x_, double y_)
{x = x_;
y = y_;
}
AnsiString C2DPunkt::toStr()
{return "("+FloatToStrF(x,ffGeneral,6,2)+"|"+FloatToStrF(y,ffGeneral,6,2)+")";
} // z.B. (2,35|3,46)
void C2DPunkt::show()
{Form1->Memo1->Lines->Add(toStr());
}
Wenn eine Elementfunktion nicht außerhalb, sondern innerhalb der Klasse definiert (und nicht nur deklariert) wird, ist sie automatisch eine **inline-Funktion**. Wie bei globalen inline-Funktionen muss der Compiler den Aufruf einer inline-Elementfunktion nicht durch ihre Anweisungen ersetzen. Ein solcher Aufruf kann auch als „gewöhnlicher“ Funktionsaufruf übersetzt werden.
**Beispiel 1c:** Die folgende Klassendefinition unterscheidet sich von der aus dem letzten Beispiel nur dadurch, dass die Funktionen hier inline-Funktionen sind.
class C2DPunkt
{double x,y;
void Init(double x_, double y_)
{x = x_;
y = y_;
}
AnsiString toStr()
{return "("+FloatToStrF(x,ffGeneral,6,2)+"|"+FloatToStrF(y,ffGeneral,6,2)+")";
} // z.B. (2,35|3,46)
void show()
{Form1->Memo1->Lines->Add(toStr());
}
};
Bemerkung: Damit eine Elementfunktion eine inline-Funktion ist, muss man sie allerdings nicht in der Klasse definieren. Man kann sie auch außerhalb der Klasse mit dem Schlüsselwort inline definieren:
inline void C2DPunkt::Init(double x_, double y_)
{x = x_;
y = y_;
}