Funktionen (Rückgabewert/Parameterwert)



  • mgaeckler schrieb:

    EDIT: Bei Typdefinitionen wird natürlich nichts im Speicher erzeugt.

    Da fällt mir noch ein, der Unterschied zwischen einer Typdefinition und einer -deklaration ist.
    Nach einer Typdeklaration darfst Du den Typ benutzen, wann immer ein Typ gefragt wird aber solange der Compiler nicht die Größe kennen muß. Wenn der Compiler die Größe kennen muß, um z.B. eine Variable zu definieren, muß auch der Typ definiert sein.

    mfg Martin



  • mgaeckler schrieb:

    Bashar schrieb:

    Wenn du es wirklich lernen willst, musst du dir andere Quellen als solche Videos suchen. Nicht nur, dass Videos generell ein schlechtes Medium für solchen Stoff darstellen, der Typ, der das macht, ist auch offensichtlich nicht gerade ein Experte...

    Über die Qualität des Autors als C++-Entwickler lässt sich nur sehr schwer was sagen.

    Doch, guck dir Folge #17 an.



  • Bashar schrieb:

    mgaeckler schrieb:

    Bashar schrieb:

    Wenn du es wirklich lernen willst, musst du dir andere Quellen als solche Videos suchen. Nicht nur, dass Videos generell ein schlechtes Medium für solchen Stoff darstellen, der Typ, der das macht, ist auch offensichtlich nicht gerade ein Experte...

    Über die Qualität des Autors als C++-Entwickler lässt sich nur sehr schwer was sagen.

    Doch, guck dir Folge #17 an.

    Also wirklich!
    Hat doch glatt vergesen den Speicher am Ende des Programmes zu löschen:

    for (iter = list.begin(); iter != list.end(); ++iter)
    {
      delete &*iter;
    }
    

    Böses Speicherleck.



  • Not sure if joking...

    Ich hoffe mgaeckler macht sich ein eigenes Bild. Und der OP lässt sich nicht verwirren.



  • Bashar schrieb:

    Not sure if joking...

    Ja, joking.
    Hätt ich net machen sollen. 👎



  • Nathan schrieb:

    Bashar schrieb:

    Not sure if joking...

    Ja, joking.
    Hätt ich net machen sollen. 👎

    Richtig. Das Problem ist, daß ja die meisten Programmiertechniken, die Anfänger lernen sollen, erfunden wurden, um komplexe Programme sicher entwickeln zu können. Viele der Programmiertechniken, die bei Profis so verpönt sind (globale Variablen, vergessen der Speicherfreigabe etc.), können bei simplen Helloworldprogrammen problemlos benutzt werden. Vergessener Speicher wird vom OS recycled. Probleme mit globalen Variablen treten bei simplen Programmen eher nicht auf bzw. können leicht beherscht werden.

    Programmierer wollen aber über das Anfängerstadium hinaus. Dann müssen solche Techniken ins Fleisch und Blut übergangen sein. Daher sollten auch solche Tutorials, die für Anfänger gedacht sind, solche Techniken verwenden.

    Eine Integervariable mit new zu erzeugen und dieses nie freizugeben ist daher dumm. Sowas hat in einem Tutorial nichts verloren. Überhaupt stellt sich die Frage, warum er eine Variable mit new erzeugt. Eine lokale Variable hätte es auch getan.

    Sicher, auch ich mache mir nicht immer die Mühe, wenn ich hier Beispielcode poste, alle Facetten aus zu formulieren. Das ist aber dann OK, wenn es für die Beantwortung der aktuellen Frage nicht notwendig ist, und ich schreibe es auch (fast) immer dazu.

    mfg Martin



  • mgaeckler schrieb:

    Überhaupt stellt sich die Frage, warum er eine Variable mit new erzeugt.

    Weil er so einiges nicht kapiert hat.

    Für alle, die das Video auch nicht angesehen haben, er macht etwa sowas:

    std::list<int> liste;
    std::list<int>::iterator it;
    
    for (int i = 0; i < 10; i++) {
      int *p = new int(10 + i);
      liste.push_back(*p);
    }
    
    for (it = liste.begin(); it != liste.end; it++) {
      cout << *it << endl;
      // Hier stand zuerst nur cout << it << endl, dann kommt eine Bemerkung wie
      // "Ach wir haben ja Pointer in der Liste", und er fügt das Sternchen hinzu
    }
    

    Sorry, aber da kann man ja mehr von Jürgen Wolf lernen.



  • Bashar schrieb:

    mgaeckler schrieb:

    Überhaupt stellt sich die Frage, warum er eine Variable mit new erzeugt.

    Weil er so einiges nicht kapiert hat.

    Für alle, die das Video auch nicht angesehen haben, er macht etwa sowas:

    std::list<int> liste;
    std::list<int>::iterator it;
    
    for (int i = 0; i < 10; i++) {
      int *p = new int(10 + i);
      liste.push_back(*p);
    }
    
    for (it = liste.begin(); it != liste.end; it++) {
      cout << *it << endl;
      // Hier stand zuerst nur cout << it << endl, dann kommt eine Bemerkung wie
      // "Ach wir haben ja Pointer in der Liste", und er fügt das Sternchen hinzu
    }
    

    Sorry, aber da kann man ja mehr von Jürgen Wolf lernen.

    Das Video habe ich gar nicht gesehen. Der wiederholt seinen Scheiß auch noch.

    mfg Martin



  • ja, ist auch lustig wie er da std::vector und std::list verwechselt und wie er den speicher in einem dynamischen container manuell allozieren will. das problem ist ja nichtmal dass es solche tutorials und leute die solche tutorials machen gibt sondern dass dann auch noch leute die c++ lernen wollen online tutorials als lerngrundlage ernst nehmen und betrogen werden. ich kann allen nur empfehlen: buch kaufen und lesen. ist das gescheiteste.



  • Es geht nichts über ein gutes Buch. Wenn du programmieren lernen willst, leg dir ein entsprechendes Buch zu oder leih dir eines aus und arbeite es durch. Vergiss Tutorials, ganz besonders Videotutorials. Sie haben ihren Platz, aber dieser Platz ist definitiv nicht hier.


Anmelden zum Antworten