initialisation von objekten
-
ich habe ein objekt von einer klasse:
class Klasse{ int Zahl; . . . } int main(){ Klasse a=30; }
wie kann ich jetzt der privaten member variable
zahl den wert 30 wie oben zuweisen? (ohne konstruktor)
-
nur über eine zugriffsmethode, oder wenn du einen Zeiger auf das Objekt hast.
das mit dem Zeiger lass aber mal besser sein, das wiederspricht nämlich dem gedanken die membervariable private zu erzeugen.Was hindert dich denn dran den konstruktor zu nehmen?
-
wenn du einen konstruktor machst, kannst du es genauso schreiben wie du es hast.
-
hey stimmt
thxlalso:
class Klasse{ int Zahl; public: Klasse(int x){Zahl=x;} } int main(){ Klasse a=30; }
achja mach ich nur wegen der
übersicht
-
am besten gleich initalisierungs Listen angewöhnen
class foo { int zahl; public: foo(int a) : zahl(a) { } };
-
initialisierungs listen??? wie soll das funktionieren?
vielleicht: Objekt = {...,...}?!?
kannst du mir das verraten?
-
Das bezog sich auf den Konstruktor, nicht den Aufruf. Vergleiche mal deinen mit dem von kingruedi.
-
ja aber was hat es mit dieser zeile auf sich?
foo(int a) : zahl(a) { }
-
sie macht dasselbe, wie dein konstruktor. nur ist sie bei anderen datentypen performanter, bei constanten und referenzen unumgänglich, ebenso wie bei konstruktoraufrufen von basisklassen.
#include <string> class korrekt { const string x; public: korrekt (const string &x_) : x(x_) {} }; class geht_nicht { const string x; public: geht_nicht (const string &x_) { x = x_; /*ups geht nicht, x ist ja const! */ };
außerdem würde beim zweiten beispiel (wenn ohne const) zuerst der ctor von x aufgerufen werden, und dann nochmal der operator=. kann langsam werden.