====== Konstruktoren ======
In den bisherigen Beispielen wurde die Elementfunktion Init dazu verwendet, die
Datenelemente eines Objekts zu initialisieren. Damit man den Aufruf einer solchen
Initialisierungsfunktion nicht versehentlich vergisst, kann man in C++ sogenannte
Konstruktoren definieren. Der Compiler akzeptiert dann die Definition eines
Objekts nur, wenn dabei ein Konstruktor aufgerufen wird.
Ein **Konstruktor** ist eine Elementfunktion der Klasse, die dadurch charakterisiert
ist, dass sie denselben Namen wie die Klasse hat. Er darf keinen Rückgabetyp
haben (auch nicht void). Eine Klasse kann mehrere Konstruktoren haben. Diese müssen sich
dann wie alle anderen überladenen Funktionen durch hinreichend verschiedene
Parameter unterscheiden. Die Parameter können auch Default-Argumente haben.
Ein Konstruktor wird in den folgenden Situationen automatisch aufgerufen:
* Wenn man ein Objekt durch eine Definition erzeugt. Dabei muss nach dem Namen des Objekts eine Liste von Argumenten angegeben werden, die zur Parameterliste des Konstruktors passt. Bei der Definition des Objekts wird dann der Konstruktor mit diesen Argumenten aufgerufen.
class C2DPunkt{
double x,y;
public:
C2DPunkt(double x_)
{ // ein Parameter: x-Wert
x=x_;
y=0;
}
C2DPunkt(double x_, double y_)
{
x=x_;
y=y_;
}
};
Damit können folgendermaßen Objekte dieser Klasse definiert werden:
C2DPunkt p(3); // p=(3,0)
C2DPunkt q(5,6); // q=(5,6)
Dagegen wird diese Definition vom Compiler nicht akzeptiert:
C2DPunkt p;//Fehler: Keine Übereinstimmung für
// 'C2DPunkt::C2DPunkt()' gefunden
Die beiden Konstruktoren von C2DPunkt können auch durch einen
einzigen mit einem Default-Argument ersetzt werden:
class C2DPunkt{
double x,y;
public:
C2DPunkt(double x_, double y_=0)
{
x=x_;
y=y_;
}
};