> Wenn ich keinen eigenen Konstruktor habe werden die Variablen der
> Klasse nicht initialisiert (ich dachte das die dann standardmäßig mit 0
> initialisiert werden.)
Member-Variablen von eingebauten Typen (wie z.B int oder float) bleiben
uninitialisiert. Bei Klassen wird der Default-Kontruktor aufgerufen.
> Name(int a);
>
> Bin mir eigentlich recht sicher das das so funktionieren sollte. Wenn
> ich dann aber ein Objekt erstelle bekomme ich die Fehlermeldung: no
> matching function to call Name::Name.
Du hast einen Konstruktor definiert, der einen Wert als Parameter
erwartet. Dann mußt du bei der Erzeugung des Objekts diesen Parameter
aber auch angeben.
> Muss ich den Konstruktor in der main() extra aufrufen? Wenn ja wie?
Der wird beim Erzeugen eines Objekts immer automatisch aufgerufen. Du
kannst z.B. ein Objekt "name" erzeugen mit: Name name(5);
@Sascha Bader:
> Name :: Name ()
> {
> // hier alles initialisieren
Eigentlich nicht. Hier sind alle Initialisierungen - sofern überhaupt
welche stattfinden - schon abgelaufen. Was folgt, sind Zuweisungen.
> var1=' ';
> var2=0.0;
> // ...
> }
Eine echte Initialisierung würde so aussehen:
Name :: Name ()
: var1(' '),
var2(0.0)
{
// ...
}
> Um diesen Konstruktor zu verwenden, mußt Du z.B. in main() sowas
> schreiben
>
> Name a = new Name(123);
new gibt einen Zeiger zurück, also müßte es heißen:
1 | Name* a = new Name(123);
|
Aber dynamisch angelegte Objekte sollte man nur verwenden, wenn man sie
auch wirklich braucht. Wenn man nicht gerade eine "smart-pointer"-Klasse
verwendet, muß man nämlich sonst jedes von diesen Objekten auch wieder
manuell freigeben.