Funktionsaufruf "call by value"



  • hallo zusammen,

    ich bin neu hier und ich hoffe der beitrag ist hier richtig...

    es würde mich freuen wenn ihr mir vieleicht weiter helfen könnt zu dem thema
    funktionsaufruf "call by value" habe dazu leider nix im netz
    gefunden...vieleicht habt ihr für mich ein tipp oder einen link wo ich was zu diesem thema finde...

    besten dank schon mal...





  • http://www.volkard.de/vcppkold/inhalt.html
    lektion 34. und sinnvoll wirds, wenn man den gegensatz call vbe reference auch kennt. dazu lies von 33 bis 37.

    in c++ ist eigentlich alles call by value, außer man schreibt das referenzzeichen bei funktionsdeklaration hin.
    in vb ist eigentlich alles by reference, außer man schreibt ByVal bei der funktionsdeklaration hin.
    in java ist jedes objekt by reference und jeder flache typ ba value.
    php machts zufällig.
    die sprachen machen's also durchaus unterschiedlich.



  • mann das ging aber schnell...

    besten dank...



  • Hi!

    Call by Value bedeutet einfach, dass ein Funktionsparameter mithilfe des Wertes übergeben wird, das sieht wie folgt aus:

    void foo(std::string ByValue)
    {
       //Wenn ich ByValue hier ändere, bekommt der Aufrufer davon nichts mit
    }
    

    Das hat den Nachteil:
    1. Wird eine Kopie des Parameters gemacht, das kann bei großen Klassen zu Geschwindigkeitsverlusen kommen
    2. Wird der Parameter in der Funktion geändert, bleibt die Variable die der Aufrufer übergeben hat unverändert(kann natürlich auch gewünscht sein).

    Die zweite Variante nennt sich Call by reference und sieht wie folgt aus:
    [CPP]
    void foo (std::string & ByReference)
    {
    //Wenn man ByReference ändert merkt das auch der Aufrufer:
    ByReference = "Das haste nun davon";
    }

    int main()
    {
    std::string Hallo = "Hoffentlich ändert mich keiner!";
    foo(Hallo);
    std::cout << Hallo; //Es wird "Das haste nun davon ausgegeben"
    }
    [/CPP]

    Bei der Übergabe per Referenz muss das Objekt nicht kopiert werden, es wird sozusagen mit der übergeben Variable gearbeitet, das gleiche erreicht man mit einem Zeiger auf die Variable! Will man zwar das Objekt aus Geschwindigkeitsgründen per Referenz übergeben, aber nicht dass die Funktion das Objekt ändern kann, dann übergibt man es als const Referenz:

    void foo(const std::string &ByConstReference)
    {
       ByConstReference = "Mist das geht jetzt nicht :(";
    }
    

    KaPtainCugel



  • Erstmal vielen Dank vielen Dank für eure Hilfe. Das Problem ist folgends, kurz gesagt wir steigen da nicht so ganz durch. Wir ksind in einer Techniker klasse welche bereits kleinere Programme in QB realisiert hat und nun mit C++ begonnen hat. Unser erstes Programm sollte die Umrechnung von Fahrenheit in Celsius durchführen was uns auch gelungen ist. Daraufhin wurden in der Klasse zwei Freiwillige gesucht, das sind leider wir zwei, die den anderen die Funktionsaufrufe call by value und call by reference näher bringen sollen. Wir sollen das mit einer power Point Präsentation machen (kein Problem) aber wie kann man es am besten erklären....
    Wir sind dankbar für jede Hilfe.



  • dirkg schrieb:

    Erstmal vielen Dank vielen Dank für eure Hilfe. Das Problem ist folgends, kurz gesagt wir steigen da nicht so ganz durch. Wir ksind in einer Techniker klasse welche bereits kleinere Programme in QB realisiert hat und nun mit C++ begonnen hat. Unser erstes Programm sollte die Umrechnung von Fahrenheit in Celsius durchführen was uns auch gelungen ist. Daraufhin wurden in der Klasse zwei Freiwillige gesucht, das sind leider wir zwei, die den anderen die Funktionsaufrufe call by value und call by reference näher bringen sollen. Wir sollen das mit einer power Point Präsentation machen (kein Problem) aber wie kann man es am besten erklären....
    Wir sind dankbar für jede Hilfe.

    Entscheide dich für einen Thread.


Anmelden zum Antworten