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#Answ

    ab in das C++ Forum damit


Anmelden zum Antworten