Referenzen



  • Hallo ihr,

    wie im titel schon zu sehen ist, hab ich eine frage bzgl. referenzen. also mir is klar, dass ich bei referenzen direkt mit adressen arbeite etc. und das auch meine arbeit bei funktionen erleichter. allerdings verstehe ich folgendes nicht:

    {
    private:
    	long nr;
    	string hersteller;
    
    public:
    	Kfz(long, const string&);
            ...
    }
    

    wieso zum henker sollte ich mit referenzen arbeiten, wenn ich die sowieso const deklariere?

    also mir wär da eine einzige lösung zu dieser frage eingefallen. getter und setter methoden können ja auch lesend und schreibend auf die variablen zugreifen. wenn ich also nun die variable im konstruktor mit const deklariere, kann ich trotz referenz nicht darauf zugreifen und überschreiben... aber dennoch alle vorteile der referenzen nutzen...

    stimmt das jetzt so einigermaßen oder bin ich total auf den falschen dampfer?

    Danke schon mal für jede hilfe

    LG
    Nadine



  • Huhu,

    Das Stichwort dazu lautet: call by reference und call by value.

    // Call by value
    void foo ( std::string x ) // Hier wird eine Kopie von x erstellt, das heißt wir ändern das Original nicht... und es ist uneffizient, wenn der String ganz schön groß ist.
    {
         //Irgendwas
    }
    
    //call by reference
    void foo2 ( const std::string& x ) //Hier wird keine Kopie erstellt ( es wird mit dem Original gearbeitet ) und damit wir uns vergewissern, dass wir aus Versehen den string nicht ändern machen wir ihn zu const. 
    {
         //Irgendwas
    }
    

    Hoffe, das war verständlich (:



  • nadine_ schrieb:

    wenn ich also nun die variable im konstruktor mit const deklariere, kann ich trotz referenz nicht darauf zugreifen und überschreiben... aber dennoch alle vorteile der referenzen nutzen...
    stimmt das jetzt so einigermaßen oder bin ich total auf den falschen dampfer?

    stimmt. der vorteil ist, dass nix kopiert wird. genauso könnste z.b. einen 'const pointer' nehmen. hat denselben effekt (und den vorteil, dass du beim zugriff direkt erkennen kannst, dass es sich um ein externes objekt handelt).
    🙂


Anmelden zum Antworten