-- Postifix-Operator



  • Kann man das Programm irgendwie so umschreiben, damit das alles sinnvoller und klarer wird? 🙂



  • Die Variable nicht-statisch machen?



  • Ja, kann man sicher machen, aber das ändert am Hauptprogramm nichts. Und ich finde eigentlich das Hauptprogramm nicht gut. Es zeigt nicht, wodurch sich Präfix- von Postfix-Operatoren unterscheiden, weil Wertänderungen und Ausgaben im Hauptprogramm voneinander getrennt sind. Beim Progrämmchen vom Skym0sh0 sind sie nicht voneinander getrennt. Ich suche so etwas ähnliches, wo die Operatoren jedoch überladen wurden. Also so wie bei dem Automaten-Beispiel.



  • So?

    Automat data01;
    
      cout << (++data01).get_zugriffe() << endl;
      cout << data01++.get_zugriffe() << endl; // zugriffe = 2
      cout << (--data01).get_zugriffe() << endl; // zugriffe = 1
      cout << data01--.get_zugriffe() << endl; // zugriffe = 0
    


  • Na, ich glaube, das bringts auch nicht. Das sind je Zeile auch immer nur 2 voneinander getrennte Aktionen. Das kann meiner Meinung nach auch nicht den Unterschied zwischen Präfix- und Postfix-Operationen aufzeigen.



  • Hä?
    Was hast du denn überhaupt vor??

    Den Unterschied zwischen Prä- und Postinkrement (-dekrement) kann man super easy an einem Minimalbeispiel, wie ich es oben gepostet hab, zeigen.

    Wie das implementiert wird oder warum Präinkrement schneller ist, das hast du schon in deinem Code gezeigt.

    Wodrauf willst du also hinaus?



  • Ok, ich tu mir etwas schwer, das mit Worten zu beschreiben. Ich versuchs mal anhand eines Programms:

    #include <iostream>
    #include "automat.h"
    using namespace std;
    
    int main(void) {
    
      int i = 0;
      cout << i << endl; // 0
      cout << i++ << endl;  // 0
      cout << i << endl; // 1
      cout << ++i << endl; // 2
      cout << i << endl; // 2
    
      cout << "----------------------" << endl;
    
      Automat data01;
      cout << data01.get_zugriffe() << endl; // 0
      cout << (data01++).get_zugriffe() << endl; // hier kommt 1 statt 0!!!!
      cout << data01.get_zugriffe() << endl; // 1
      cout << (++data01).get_zugriffe() << endl; // 2
      cout << data01.get_zugriffe() << endl; // 2
    
      return 0;
    }
    

    In der Zeile 18 hätte ich eigentlich gerne die gleiche Ausgabe wie in Zeile 9.



  • Siehe:

    Bashar schrieb:

    Die Variable nicht-statisch machen?



  • Tatsächlich. Jetzt funktionierts. Seltsam 😕



  • tröröö schrieb:

    Tatsächlich. Jetzt funktionierts. Seltsam 😕

    Nein, wieso?

    Statische Variablen (Klassenvariablen) sind nicht an Objekte gebunden, sondern gelten für alle Objekte (Instanzen) einer Klasse. Ob du da jetzt was kopiert, gemoved oder sonstwas ahst, hat keine Auswirkungen.



  • OK. Dann schick ich dem Buchautor mal ne Mail, dass das mit der statischen Eigenschaft nicht hinhaut. Wird er sicher korrigieren wollen. Thanks 🙂



  • Jürgen Wolf?

    😞



  • Also wenn man bedenkt, dass das Buch 10,20 € kostet, ist es absolut unschlagbar! 🙂



  • Was nützt es ein paar Kröten gespart zu haben, wenn du damit völlig verkorkstes C++ lernst und dein ganzes Leben daran leidest?


Anmelden zum Antworten