Sinn einer Elementinitialisierungsliste
-
Hallo,
da ich vorher hauptsächlich mit Java programmiert habe, verstehe ich den Sinn einer Elementinitialisierungsliste noch nicht so ganz. Ich zeige euch mal einen Codeausschnitt eines Konstruktors:
class TEILNEHMER { private: std::string name; int ima; static int counter; public: TEILNEHMER(); TEILNEHMER(std::string a, int b); ~TEILNEHMER(); static int getCount(); std::string getName(); int getMtrk(); }; TEILNEHMER::TEILNEHMER(std::string a, int b):name(a), ima(b) { counter++; } ...Wo ist der Unterschied dazu? So mache ich das immer in Java:
TEILNEHMER::TEILNEHMER(std::string name, int ima) { this.name = name; this.ima = ima; counter++; }Liebe Grüße,
Oli
-
Kennst du den Unterschied zwischen Initialisierung und Zuweisung?
// Initialisierung std::string name("Fred"); // Default-Konstruktion und Zuweisung std::string name2; // name2 == "" name2 = "Barney";Die Initialisiererliste ermöglicht ersteres in Klassen, deine Variante ist das zweite. Für Member ohne Defaultkonstruktor, für const-Member und für Referenzen ist sogar nur Initialisierung möglich.
-
-
Bashar schrieb:
Kennst du den Unterschied zwischen Initialisierung und Zuweisung?
Also meine Freundin (die sich eigentlich nur mit C, nicht aber mit C++ auskennt) hat mir das gerade so erklärt:
Initialisierung: Während die Variable erzeugt wird, wird ihr gleichzeitig der Wert zugewiesen, wodurch ausreichend Speicher reserviert wird.
Zuweisung: Die Variable wurde vorher erzeugt und der Speicher dafür reserviert. Da man noch nicht weiß, was der Variable später zugewiesen wird, wird u.U. mehr Speicher reserviert, als nach der Zuweisung erforderlich.
D.h. Initialisierung kann Speicher sparen.
Ist jetzt etwas rudimentär ausgedrückt!

Aber ist das vom Prinzip her richtig? ^^
-
lerneLebenslang schrieb:
Initialisierung: Während die Variable erzeugt wird, wird ihr gleichzeitig der Wert zugewiesen, wodurch ausreichend Speicher reserviert wird.
Zuweisung: Die Variable wurde vorher erzeugt und der Speicher dafür reserviert. Da man noch nicht weiß, was der Variable später zugewiesen wird, wird u.U. mehr Speicher reserviert, als nach der Zuweisung erforderlich.
"Frauen schreiben schlechten Code?"
Ich muss den Thread wieder ausgraben!!
-
Bashar schrieb:
Die Initialisiererliste ermöglicht ersteres in Klassen, deine Variante ist das zweite. Für
MemberKlassen ohne Defaultkonstruktor, für const-Member und für Referenzen ist sogar nur Initialisierung möglich.
-
MrFixit schrieb:
Bashar schrieb:
Die Initialisiererliste ermöglicht ersteres in Klassen, deine Variante ist das zweite. Für Member
Klassenohne Defaultkonstruktor, für const-Member und für Referenzen ist sogar nur Initialisierung möglich.Das war richtig.