31 thoughts on “C++ Tutorial [013] – call by reference, Referenzen an Funktionen GERMAN

  1. Bei Java gibt es kein Call By Reference. Es ist ist immer Call by Value! Nur bei Objekten wird eine Kopie der Referenz zu dem Objekt erstellt und mit dieser weiter gearbeitet. Diese Spezialform von Call by Value heißt Copy by Sharing und unterscheidet sich von Call by Reference darin, dass bei Neuzuweisung der Variablen in einer Funktion nicht die Originalvariable verändert wird.

  2. Hallo Brotcrunsher

    1) im vorherigen Kapitel "Funktionen" hattest du vor "int main() {..}" eine "int add (int a, int b) {…}" Funktion. Diese "add" Funktion hatte "return a + b" stehen. Warum wurde da keine Kopie übergeben und der Wert verändert? Ist "return" soetwas ähnliches wie eine Referenz?

    2) wo macht es Sinn mit einer Kopie zu arbeiten?

    Grüße

  3. Wenn in Java einer Methode ein Objekt übergeben wird, kann es ENTWEDER call-by-reference ODER call-by-value sein. Dies hängt davon ab, ob man der Referenz ein neues Objekt zuweist.

    Also:
    Ich hab ein Objekt "Hund" mit der Variable "int groesse = 1" (plus getter und setter)
    und 2 Methoden, nämlich:

    private static void callByReferene(Hund dog) {
    dog.setGroesse(5);
    }

    private static void callByValue(Hund dog) {
    dog = new Hund();
    dog.setGroesse(100);
    }

    In der main haben wir folgendes:
    public static void main(String[] args) {
    Hund fido = new Hund(); //groesse wird auf 1 im Construtor gesetzt
    callByReference(fido);
    System.out.println(fido.getGroesse()); //Es wird 5 auf der Konsole ausgegeben

    callByValue(fido);
    System.out.println(fido.getGroesse()); //Werd auf der Konsole ist immer noch 5, da in der Methode dem //Parameter ein neues Objekt zuewiesen wird und wir somit in den "Call-by-value-Modus" Wechseln.
    }

    Btw: Super Tutorials! Weiter so!

  4. Wenn man beispielsweise ein Programm schreibt, bei dem es wichtig ist, so wenig Speicher aufzubrauchen wie möglich und man erstellt eine Methode/Funktion, die einen Parameter per Call-By-Value nimmt, am besten noch mit einem Objekt, das viel Speicher aufbraucht, wäre es dann nicht besser mit dem '&' Call-By-Reference zu nutzen, um keine speicherfressende Kopie durch Call-By-Value zu erstellen?

  5. Sagt man nicht mit dem "&" Operator eigentlich gut zeige auf die Speicherstelle vom argument? quasi f(&a) zeigt eigentlich wo das argument abgespeichert ist

  6. static void swap(int  *n1, int *n2)
    {
         int temp;
         temp = *n2;
         *n2 = *n1;
         *n1 = temp;
    }  /* So hab ich in C gelernt Deklaration mit Stern */

    int main(void)
    {
        val1, val2;
        swap(&val1, &val2);
    } /* und beim Aufruf der Adressoperator – GILT DAS NUR FÜR C UND NICHT FÜR C++?
         so das ist dann call-by-reference /

    Hätte auch so gesagt wie Yasahan, bitte klärts mich auf wenn ich falsch liege.

    Und sonst: Super erzähl-flow!! tolle videos 😀

  7. void doSmth(int *a){
    a++;
    }

    using namespace std;

    int main(){

    int x = 5;
    doSmth(&x);

    cout<<x<<endl;

    return 0;

    }

    Sollte es nicht eigentlich so sein? Also ein Pointer als Parameter? In meinem Buch habe ich nämlich Call-By-Refenrence so gelernt.

    Vielen Dank fürs Video übrigens (: !

  8. Bei PHP und c# werden übrigens bei Objekten nur der Bezeichner kopiert, nicht deren Inhalt. Somit kann man innerhalb der Funktion/Methode Daten im Objekt verändern, aber nicht das ganze Objekt überschreiben.

  9. Bis jetzt erscheint mir noch kein Nutzen, da man theoretisch auch eine neue Variable erstellen kann, welche diese Funktion aufruft. Aber ich glaube bald werde ich es wissen 😀

  10. Ich möchte nicht klugscheißen, aber war es nicht so, dass bei Java eigentlich alles call-by-value ist?
    Nur, dass in der variable für ein Objekt nicht das Objekt selbst, sondern der Zeiger auf das eigenliche Objekt steht. So habe ich das auf jeden Fall noch im Kopf 😉

Leave a Reply

Your email address will not be published. Required fields are marked *