Einige Methoden kommen von selbst

Beispielprogramm: AUTOMETH.CPP

Selbst wenn Du keine Konstruktoren oder überladene Operatoren schreibst, definiert der Compiler einige automatisch. Wirf einen Blick auf die Datei AUTOMETH.CPP, die einige dieser Methoden illustriert und zeigt, warum Du manchmal die automatisch bereitgestellten nicht verwenden kannst, sondern selbst Methoden schreiben mußt, die deren Arbeit übernehmen.

Bevor wir uns dem Programm selbst widmen, wollen wir einige der Regeln angeben, die Autoren von Compilern berücksichtigen müssen. Wir werden sie zuerst überblicksmäßig anführen, um dann ein wenig darauf einzugehen.

  1. Wenn für eine Klasse kein Konstruktor existiert, erzeugt der Compiler automatisch einen Konstruktor und einen Kopierkonstruktor. Beide werden wir definieren.
  2. Ist ein Konstruktor vorhanden, erzeugt der Compiler keinen.
  3. Wenn für eine Klasse kein Kopierkonstruktor existiert, erzeugt der Compiler einen, nicht jedoch, wenn der Autor der Klasse einen Kopierkonstruktor geschrieben hat.
  4. Ist ein Zuweisungsoperator vorhanden, erzeugt der Compiler nicht automatisch einen, andernfalls schon.

Für jede Klasse, die wir einem C++ Programm deklarieren und verwenden, muß es möglich sein, ein Objekt zu "konstruieren", da der Compiler definitionsgemäß einen Konstruktor aufrufen muß, wenn wir ein Objekt definieren. Wenn wir selbst keinen Konstruktor schreiben, erzeugt der Compiler selbst einen, den er beim Konstruieren von Objekten aufrufen kann. Das ist der Standardkonstruktor, den wir ohne es zu wissen, schon in vielen unserer Beispielprogramme verwendet haben. Der Standardkonstruktor initialisiert keine Elementvariablen, setzt aber alle internen Referenzen und ruft den Konstruktor (oder die Konstruktoren) der Basisklasse auf, falls solche existieren. Wir haben die Vererbung noch nicht studiert, werden uns diesem Kapitel aber im nächsten Abschnitt unserer Einführung widmen, dann wirst Du auch über Basisklassen Bescheid wissen. In Zeile 10 deklarieren wir einen Konstruktor, der aufgerufen wird, wenn wir ein Objekt ohne Parameter definieren. In diesem Fall ist der Konstruktor notwendig, da wir eine interne Zeichenkette haben, für die dynamisch Speicher beschafft und die mit einer leeren Zeichenkette initialisiert werden muß. Denk kurz darüber nach, und Du wirst sehen, daß dieser unser Konstruktor viel besser ist als der Standardkonstruktor, der einen initialisierten Zeiger zurücklassen würde.

Dieser Konstruktor wird in Zeile 77 des Beispielprogrammes verwendet.

(weiter...)