Init-Liste
-
Welchen Sinn macht die Init.-Liste, außer dass man konstante member damit einmalig im Konstruktor mit einem Wert belegen kann?
-
Objekte können direkt initialisiert werden, ohne dass zuerst der Standardkonstruktor aufgerufen wird:
class A { string s; public: A() {s = "a";} // string::string(), string::operator=(const char*) A() : s("a") {}// string::string(const char*) };
-
Bei Referenzen als Member ist das z.B. sehr wichtig.
-
und wenn du die Konstruktoren der basis Klassen aufrufen willst
ein Beispiel
class base { int b; public: base(int i) : b(i) { } int foo(void) const { return b; } }; struct derived1 : public base { derived1() { }; //Fehler! Kein standard Konstruktor für base }; class derived2 : public base { int x; public: derived2(int z=0) : base(0),x(z) { } //okily dokily derived2(const derived2 &d) //okay, hier hätte es auch der std cctor getan :) : base(d),x(d.x) { } //wichtig: auch den cctor des base Objekt aufrufen derived2 &operator=(const derived2 &d) { base::operator=(d); //auch den cop der Base Klasse aufrufen x=d.x; } };
cop steht für copy operator, cctor für copy constructor
btw.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Init#Answab in das C++ Forum damit