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(); };
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_; }