next up previous contents
Next: Kopieren und Zuweisung von Up: Klassen Previous: Elementfunktionen

Konstruktion von Objekten

Bei der Deklaration einer Variablen vom Typ Person muss der Compiler Speicherplatz bereitstellen und diesen geeignet initialisieren. Dazu wird im Falle einer Klasse immer ein sogenannter Konstruktor aufgerufen. Konstruktoren sind spezielle Elementfunktionen, die als Namen den Klassennamen selbst tragen und keine Rückgabetyp, auch nicht void festlegen. Wir können beliebig viele Konstruktoren definieren, die sich allerdings, wie für überladene Funktionen typisch, im ihren Argumenten unterscheiden müssen. Ihre Aufgabe ist immer die Herstellung eines konsistenten Zustandes der Instanz durch Initialisierung von Variablen, insbesondere die Initialisierung von Konstanten im Klassenkörper, die Anforderung von Resourcen wie Speicher, das Öffnen einer Datei oder Netzwerkverbindung, usw. Eine besondere Rolle spielt der Defaultkonstruktor, dem kein Argument übergeben wird. Er wird, falls vom Benutzer kein anderer Konstruktor definiert ist, implizit vom Compiler bereitgestellt und seine Existenz ist für die Initialisierung von Feldern einer Klassenvariable notwendig.

class Person{ 
  public:
  Person();   // user defined default constructor (ctor)
  //...  
};

Analog zum Konstruktor einer Klasse gibt es einen Destruktor, der nötigenfalls angeforderte Resourcen wieder freigibt. Dieser trägt als Name den Klassennamen mit einem vorangestellten ~.

Person.h:                 //Dateiname
class Person {
  public:
  Person(Datum birthday, string name); // Konstruktor
  Person(const Person &);              // Kopierkonstruktor
  ~Person();                           // Destruktor
  int age;            // z.b. in Tagen von Referenzdatum gerechnet
  std::string name;   // C++ standard library Klasse
};

Person.cc:             //Dateiname
                       // Programmcode zum constructor  (ctor)
Person::Person(Datum birthday, string a_name) 
{
   name = a_name
   age = current_date() - birthday;
}

Person::Person(const Person &rhs)  // Programmcode zum copy constructor
{
   name = rhs.name;
   age = rhs.age
}

Person::~Person(){}    // destructor   (dtor)

So wie der Konstruktor dafür sorgt, dass Konstruktoren für alle Klassenbestandteile in der Reihenfolge ihres Auftretens in der Klassendeklaration aufgerufen werden, so sorgt der Destruktor für einen entsprechenden Aufruf der Destruktoren der Klassenbestandteile in umgekehrter Reihenfolge. Wie im Falle des Defaultkonstruktors wird vom Compiler ein Destruktor bereitgestellt, falls vom Benutzer keiner definiert wird. Es gibt nur einen Destruktor, der argumentlos und ohne Rückgabetyp deklariert werden muss.


next up previous contents
Next: Kopieren und Zuweisung von Up: Klassen Previous: Elementfunktionen
© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002