Initialisierungsliste



  • Konstanten und Referenzen musst du bei der Initialisierung einen Wert zuweisen.
    Konstanten sind halt einfach Konstant, und wenn die bereits erstellt wurden, kannst du den Wert nicht mehr ändern.
    Wenn du in dem Block des Konstruktors bist, existieren c und r bereits. Heißt du kannst der Konstanten keinen Wert mehr zuweisen.

    Bei Referenzen ist das ähnlich gelagert. Im Gegensatz zu einem Pointer, der auch auf "NULL" (also nix) zeigen kann, gibt es keine "NULL"-Referenz. Wenn du also als Klassenmember eine Referenz haben willst, muss diese beim Erstellen bereits ein zu referenzierendes Objekt bekommen.

    Für beide Sachen (const und ref) brauchst du genau dafür die Initialisierungsliste. Denn diese initialisiert dein c und dein r gleich mit Werten, sobald diese erstellt werden.
    Sollte aber eigentlich schon in deinem Buch oder Tutorial erwähnt werden.

    Grüße
    Franz



  • ok so weit verständlich

    nur mal so:
    WANN werden eigentlich klassenmember erstellt?
    schon bevor ich den konstruktor aufrufen kann?

    also so in der art:

    class x
    {
        int v;
    public:
        x(int i){ v = i}
    }
    

    würde ein aufruf v(4)
    intern etwa so aussehen?

    -> standardkonstruktor int
    -> v= 0
    -> aufruf des konstruktorrumpfes
    -> v=4

    ?



  • ravenheart schrieb:

    class x
    {
        int v;
    public:
        x(int i){ v = i}
    }
    

    würde ein aufruf v(4)
    intern etwa so aussehen?

    -> standardkonstruktor int
    -> v= 0
    -> aufruf des konstruktorrumpfes
    -> v=4

    ?

    Eigentlich schon, nur dass nicht v = 0 sondern v = Ramdon_Crap gemacht wird (lokale Variablen und Klassenmember werden nicht default-initialisiert).

    Felix



  • also ich versuche grade c++ gescheit zu lernen und hier hab ich ein beispiel

    Dann rate ich dir, ein gutes Buch zu kaufen. Dann klappt es meist auch mit:

    das ich nicht verstehe

    Die meisten Tutorials sind eher duerftig und recht kurz gehalten. Zwar erklaeren sie meist die Sprachfeatures, lassen das Verarbeitungsmodell aber ganz ausser acht.



  • Steht doch eh schön erklärt unter dem Code 🙄

    Dieser Code funktioniert nicht, da sowohl int& r als auch int const c; bereits bei der Initialisierung einen Wert erhalten müssen. Doch wann findet diese Initialisierung statt?

    Die Initialisierung findet vor dem Körper des Konstruktors statt - folglich können wir keine Referenzen und Konstanten werden... Aber halt - es gibt eine Lösung: die Initialisierungsliste.



  • franz schrieb:

    Bei Referenzen ist das ähnlich gelagert. Im Gegensatz zu einem Pointer, der auch auf "NULL" (also nix) zeigen kann, gibt es keine "NULL"-Referenz.

    Das hat nicht direkt mit Null zu tun. Referenzen sind eben auch konstant, deshalb müssen sie in der Initialisierungsliste initialisiert werden. Eine Zuweisung an Referenzen ist nur schon aufgrund der Syntax unmöglich.



  • Dann rate ich dir, ein gutes Buch zu kaufen. Dann klappt es meist auch mit:

    ich zähl lieber nicht nach wie viele euros ich scvhon in c++ bücher investiert habe
    und keines behandelt initialisierungslisten auf mehr als einer viertel seite -.-

    bei java sah das anders aus, im java-kompendium wurde alles was ich gebraucht habe schön erklärt

    bei c++ ist das leider gar nicht so ich finde einfach kein kostengünstiges deutsches buch das für nicht-ganz-neulinge geeignet ist
    also ich hätte gern ein buch in dem ALLES erklärt ist oder eines das mal die ganze erklärung vom sinn der oop weglässt und mir exakt die eigenheiten vpn c++ erklärt

    naja buchtipps sind willkommen
    aber kritische anmerkungen dieser art müssen nicht unbedingt sein finde ich
    immerhin versuche ich mich ja selbst mit dem thema auseinanderzusetzen



  • Thinking in C++ 1/2 gibt es als Ebooks gratis zu lesen..
    Und die behandeln afaik sehr viel.


  • Administrator

    rabenherz schrieb:

    bei java sah das anders aus, im java-kompendium wurde alles was ich gebraucht habe schön erklärt

    bei c++ ist das leider gar nicht so ich finde einfach kein kostengünstiges deutsches buch das für nicht-ganz-neulinge geeignet ist
    also ich hätte gern ein buch in dem ALLES erklärt ist oder eines das mal die ganze erklärung vom sinn der oop weglässt und mir exakt die eigenheiten vpn c++ erklärt

    Naja, Java ist eine DEUTLICH einfachere Sprache als C++. Nur über den Bereich Templates in C++ kann man Bücher füllen (<- MEHRZAHL). Deshalb ist es halt manchmal etwas schwer für die Autoren, nur ein Buch zu füllen.

    Falls du aber ein Buch möchtest, welches eine relativ steile Lernkurve hat und somit bereits gewisses Wissen über Programmiersprachen voraussetzt, dann wäre wahrscheinlich die sogenannte C++ Bible das richtige für dich:
    "Die C++ Programmiersprache" von Bjarne Stroustrup, dem Erfinder von C++ 😉
    (Hab grad nachgeschaut, behandelt die Initialisierungsliste über 3 Seiten)

    Einstiegsbücher, werden in diesem Forum fast ausschliesslich diese zwei Empfohlen:
    C++ Primer
    Thinking in C++ 1&2 (auch im Web gratis erhaltbar)

    Der Rest, welcher auf dem Markt ist, ist leider oft Schrott.

    Grüssli



  • Auch wenn hier vielleicht einige widersprechen werden, würde ich zum C++ Primer raten, welches derzeit für knapp 30 Euros erhältlich ist. Didaktisch fand ich es gut aufgebaut, und eine angemessene Tiefe war für den Anfang auch gegeben. Sicherlich handelt das Werk nicht alles ab, aber für einen sauberen Einstieg finde ich es ideal. Ich hatte selbst viel Geld in die letzten Mist-Bücher investiert. Im nachinein wünsche ich mir, gleich dieses Buch gekauft zu haben. Dies hätte mir eine Menge Geld und Verwirrung gespart.


Anmelden zum Antworten