Elementinitialisierer und Default-Werte ?
-
Hallo,
Ich habe eine Klasse A. In dieser gibt es die Methode setParms(), welche ich zum setzen einzelner Parameter nutze. setParms() besitzt ebenso Default Werte. Daher rufe ich diese Methode zur Initialisierung, innerhalb des Default-Konstruktors auf. Mein Problem ist der zweite Parameter von setParms(). Dieser stellt ein "Punktobjekt" dar und besteht aus zwei int-Parametern.
Gibt es eine Möglichkeit dieses Problem zu lösen ohne die Methode setParms() zu überschreiben?
Die Option vorab ein "Punktobjekt" zu erzeugen, dieses mit z.B. x=0 und y=0 zu initialisieren und an die Methode setParms() zu übergeben kann ich nicht nutzen.
Wie würdet ihr dieses Problem lösen?
class A { public: A() { this->setParms(); } void setParms(const int& refZahl = 0,const CPunkt& refPt /* = ??? */): Zahl(refZahl), Punkt(refPt) { } private: int Zahl; CPunkt Punkt; }
-
1. Wieso der Umweg über die Funktion? Wieso verwendest du nicht die Intialisierungsliste im Konstruktor?
2. Eine Initialisierungsliste bei einer Funktion? Was hast du für einen seltsamen Kompiler, welcher das aktzeptiert.
3. Dreh die Reihenfolge der Parameter um, wenn du kein Defaultwert für dein Punktobjekt haben willst. Ansonsten überlädst du halt und leitest von der einen Funktion an die andere weiter.
4. Wofür steht bitteParms? Parameters? Wieso dann nicht gleichsetParameters?Grüssli
-
Bei Dir hat setParams sowas wie eine Initialisierungliste, das ist falsch und gibt es nicht.
Initialisierungslisten sind nur in Konstruktoren zulässig.
Simon
Edit:
Nur der vollständigkeitshalber:struct Punkt { Punkt(int x, int y) {} }; struct A { A() { setParams(); } void setParams(int zahl = 0, const Punkt& punkt = Punkt(0, 0)) { } };
-
Danke für die schnelle Hilfe. Man, man, man ich hab echt nicht gemerkt was ich da mache. Ich hab überlegt wie ich dieses Punktobjekt initialisieren kann und dabei den Blick fürs wesentliche verloren. Daher hab ich das ganze auch noch nicht kompilieren lassen.
Parms steht da nur, weil es schnell gehen musste. Normalerweise nutze ich schon aussagekräftigere Bezeichner.
-
Parms steht da nur, weil es schnell gehen musste. Normalerweise nutze ich schon aussagekräftigere Bezeichner.
delete schreibe ich normalerweise auch hin, aber manchmal muss es eben schnell gehen, dann lass ich es weg...
