Verstehe die Elementmethoden nicht



  • class Animal
    {
    public:
       Animal(int);
       Animal();
       ~Animal() {}
       int GetWeight() const { return itsWeight; }
       void Display() const  { cout << itsWeight; }
    private:
       int itsWeight;
    };
    
    //Verstehe nicht was bedeutet itsWeight nach dem doppelpunkt???
    class Animal
    {
    public:
       Animal(int);
       Animal();
       ~Animal() {}
       int GetWeight() const { return itsWeight; }
       void Display() const  { cout << itsWeight; }
    private:
       int itsWeight;
    };
    
    Animal::Animal(int weight):
    itsWeight(weight)
    {}
    
    Animal::Animal():
    itsWeight(0)
    {}
    itsWeight(weight)
    {}
    

    Leider verstehe ich die zwei Elementmethoden nicht, besonders beim Doppelpunkt nach "Animal::Animal(int weight):" hab ich keine Ahnung was er bedeuten könnte.



  • Hallo,

    der :: wird auch als Scope-Operator bezeichnet. Dadurch wird dem Kompiler gesagt, dass die Funktion Animal zu der Klasse Animal gehört. Ohne diese :: würde der Kompiler das nicht wissen, denn jede andere Klasse könnte ja auch eine Funktion Animal haben (zumindest dann, wenn es einer normale Funktion wäre). Das wird also immer nötig, wenn die Funktionen außerhalb der Klassendefinition definiert werden.

    Das heisst also, dass diese Zeile...

    // Konstruktor
    Animal::Animal(int weight): itsWeight(weight) {}
    

    ...den Konstruktor von Animal mit einem Parameter aufruft und die Membervariable itsWeight mit dem übergebenen Paramter initialisiert.

    Animal::Animal(): itsWeight(0) {}
    

    Hier wird der Konstrutkor ohne Parameter aufgerufen. Konstruktoren sind überladbar, d. h. man kann verschiedene Konstruktoren erstellen mit einer unterschiedlichen Anzahl Parametern.



  • @CarstenJ
    Ich glaube es ging hier mehr um den einzelnen Doppelpunkt nach der Ctor-Parameterliste.

    @hansoo
    Der Doppelpunkt leitet die sogenannte Elementinitialisierungsliste ein. Damit kannst du, wie der Name sagt, Elemente (inklusive (direkte) Basisklassen)initialisieren.
    Wenn du die Initialisierungsliste nicht verwendest, werden die Member erstmal Default-Initialisiert. Im Konstruktor-Körper kannst du dann nur noch Werte zuweisen. Basisklassen und konstante bzw. Referenz-Member kannst du hingen nur über die Initialisierungsliste mit Werten belegen.



  • http://tutorial.schornboeck.net/initliste.htm

    Das Wesentliche ist der Unterschied zwischen Initialisierung und Zuweisung (bei Konstanten und Referenzen nicht erlaubt).


Anmelden zum Antworten