next up previous contents
Next: Konstruktion von Objekten Up: Klassen Previous: Datenelemente


Elementfunktionen

Neu in C++ gegenüber C ist, dass Elementfunktionen (oder Methoden, englisch ``member functions'') einer Struktur/Klasse erklären kann, die privilegierten Zugriff auf deren Datenelemente genießen. Zum Beispiel ließe sich die obige Struktur durch spezielle Funktionen zur Berechnung des Geburtstages oder der getrennten Ausgabe von Vor- und Nachnamen der Person erweitern:

class Person {
  public:
  // member functions   
  Datum  birthday() const;     // compute birthday
  std::string first_name() const;  // get first name
  std::string surname() const;     // get surname    
  void set_name(std::string name);    // changes name (marriage, ...)

  // data
  int age;
  Datum birthday;      
  std::string name;            // C++ standard library class
};
Im obigen Beispiel deutet Datum eine weitere benutzerdefinierte Klasse an, die in der Lage ist, ein bestimmtes Datum zu repräsentieren.

Das const hinter der Argumentliste der gewöhnlichen Elementfunktionen deutet an, daß diese nur lesend auf Datenelemente der Klasse zugreifen und die Klassenvariablen somit unverändert lassen. Dies erlaubt dem Compiler, gewisse Optimierungen vorzunehmen. Wichtig ist außerdem, dass auf Instanzen einer Klasse, die als const vereinbart wurden, nur konstante Elementfunktionen Anwendung finden können. Man sollte also, wo möglich, den ausschliesslich lesenden Zugriff einer Funktion mit const für den Compiler kennzeichnen.

Die Definition von Elementfunktionen erfolgt üblicherweise in der Implementierungsdatei,

Person.cc:

Datum 
Person::birthday() const {  
  return current_date() - age;
} 

std::string
Person::first_name() const { 
  // copy name, then find first segment terminated 
  // by a whitespace character 
}

std::string
Person::surname() const {
  // ...
}

void 
Person::set_name(std::string name){
   this->name = name;   // assigns argument 'name' to 
                        //  member variable name
}
oder in Ausnahmefällen im Klassenkörper selbst. Diese Funktionen sind dann inline, auch wenn sie nicht explizit so gekennzeichnet sind.

Der Bezugsrahmen(scope)-Operator :: identifiziert die Elementfunktionen als zugehörig zur Klasse (Person). Er muss an dieser Stelle verwendet werden, weil Funktionen gleichen Namens mit gleichen Argumenten auch in anderen Klassen auftreten dürfen. Auf die Datenelemente der Klasseninstanz wird mit den in der Klassendeklaration verwandten Namen zugegriffen ohne dass dazu die Operatoren . oder -> benötigt werden.


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