Taschenrechner-Funktionen



  • Trekkiebraut schrieb:

    Ein Objekt muss keine Klasse als Typ haben.

    Aber wo ist dann der Unterschied zwischen einem int-Objekt und einer int-Variablen?

    Es gibt keinen.
    Du kannst dir vorstellen, dass eine int Variable ein Objekt der Klasse int ist*.

    *Der Standard-Disclaimer: Ja, ich weiß, dass das nicht so ist; das Beispiel dient lediglich zur Veranschaulichung.



  • Vorsicht mit der Terminologie. Das Wort Objekt hat zwei Bedeutungen, die man nicht verwechseln darf:

    Es gibt Objekte in der objektorientierten Programmierung. Das sind die Dinger, die Nachrichten austauschen.

    Es gibt im C++-Standard den technischen Begriff Objekt, der einen Speicherbereich bezeichnet, der einen Wert beinhalten kann. In diesem Sinne ist eine Variable ein Objekt mit einem Namen.

    Nun ist aus dem Kontext klar, dass du Objekt im ersten Sinne verstanden hast. Sone hat ihn im zweiten Sinne verstanden. Warum weiß ich nicht, wahrscheinlich seine komische Art von Humor.



  • SeppJ schrieb:

    Klasse Taschenrechner.
    Klasse Lesegerät.
    Klasse Ausgabegerät.

    Der Taschenrechner hat ein Lesegerät und ein Ausgabegerät.

    Wenn dein Prof von Java kommt leite stattdessen Taschenrechner von Lesegerät und Ausgabegerät ab. Ist zwar sinnlos, aber voll objektorientiert. Da es C++ statt Java ist brauchst du dir nichtmal zu überlegen, ob Lesegerät von Ausgabegerät ableiten soll oder andersrum.

    Ist denn das Ziel einen Taschenrechner oder ein objektorientiertes Programm zu schreiben?



  • Veranschaulichung

    Danke, hat geklappt 😉

    Ist denn das Ziel einen Taschenrechner oder ein objektorientiertes Programm zu schreiben?

    Der Kurs heißt "Objektorientierte Programmierung" ... und das ist die Abschlussarbeit^^ Sone hatte schon Recht, es sieht nicht aus wie C. Ich hab jetzt pro forma die Ausgabe als Klassenfunktion von "Display" gemacht, aber den Input so "auszulagern" erschien mir viel zu viel Text für so wenig Funktion. Leider kann ich meinen Prof da nicht einschätzen, ob er eher für maximale Flexibilität (also mit Input-Klasse) oder für bessere Lesbarkeit ist. Wird sich zeigen.



  • Man sollte Klassen auch dort einsetzen, wo es sinn macht. Ein Cmd-Taschenrechner gehoert da fuer mich nicht dazu.



  • edit: Der Professor will ausdrücklich, dass nach C oder A nicht Enter gedrückt wird. Die Eingabe der fertigen Aufgabe soll auch über = erfolgen und nicht über Enter. C soll interpretiert werden, sobald es auf dem Bildschirm erscheint. Soweit ich weiß, speichert doch aber cin >> erst dann irgendwas in die angegebenen Variablen, wenn Enter gedrückt wird.

    Gibt es vielleicht eine Möglichkeit, die aktuelle Eingabe mit cin.getline(...) als string einzulesen und diesen gleichzeitig (also während des Eintippens) auszulesen, also in ihm nach einem bestimmten Zeichen zu scannen?

    Gruß

    Trekkiebraut



  • *leises kleines Push*


  • Mod

    Trekkiebraut schrieb:

    *leises kleines Push*

    Du bekommst keine Antwort, weil die Frage unverständlich ist. Nach dem Lesen deines Beitrags weiß ich, dass das Ergebnis nicht zufriedenstellend war, aber ich weiß immer noch nicht, was gewünscht ist. Ich weiß auch nicht, was

    Nun bin ich jedenfalls wieder bei dem Problem mit der Clear-Funktion für Taste C.

    mit dem ganzen ersten Absatz zu tun hat. Einerseits scheint es um allgemeine Designprobleme zu gehen, andererseits hängst du nun aber an technischen Detailfragen, die längst beantwortet wurden. Heißt das, das Design steht?

    Der einzige Satz mit einem Fragezeichen am Ende ist leider komplett unverständlich:

    Gibt es vielleicht eine Möglichkeit, die aktuelle Eingabe mit cin.getline(...) als char einzulesen und die Speichervariable gleichzeitig auszulesen, also in ihr nach einem bestimmten Zeichen zu scannen?

    Häh? 😕 Selbst wenn ich mal annehme, dass du mit "char" so etwas wie "Zeichenkette" meinst (ein char ist ein Zeichen!) weiß ich nicht, wovon du hier redest und was das mit dem Rest des Beitrags zu tun hat. Wieso getline? Was ist eine Speichervariable? Was genau meinst du mit "gleichzeitig"? Ich vermute mal, dass du dir hier eine falsche technische Umsetzung ausgedacht hast und nun nach Details fragst, die einfach keinen Sinn machen, da der Ansatz falsch ist. Frag nach dem, was du erreichen möchtest, nicht danach, wie du getline so verbiegst, dass es etwas tut, wofür es nicht da ist.

    Ich vermute mal, dir geht es weiter um direkte Nutzerinteraktion über die Tastatur. Da wurde doch schon gesagt, dass die Streams nicht dafür geeignet sind, da diese auf einer ganz anderen Abstraktionsebene laufen, auf der so etwas wie Tastendrücke längst nicht mehr existieren. Das kannst du auch nicht so hinbiegen, dass wieder Tastendrücke herauskommen, die Information ist auf Streamebene einfach nicht vorhanden. Wenn du direkt die Tastatur eines Computers auslesen willst, dann musst du eben dies tun. Dir wurde im Verlauf des Threads bereits gesagt, dass es auf deinem System bestimmt Möglichkeiten gibt, direkt eine Tastatur anzusprechen. Dir wurde sogar der Vorschlag gemacht, diese Interaktion im Rahmen einer Klasse zu abstrahieren, damit sich der Rest des Programms nicht mit solchen systemabhängigen Details herumschlagen brauchst, was eine sehr sinnvolle Anwendung objektorientierten Designs wäre, was hier ja anscheinend gewünscht ist.

    Beantwortet dies deine Frage?



  • leider komplett unverständlich. (...) Frag nach dem, was du erreichen möchtest, nicht danach, wie du getline so verbiegst, dass es etwas tut, wofür es nicht da ist.

    Du musst mich nicht zusammenfalten, bloß weil ich mich vielleicht unklar ausdrücke. Ich wurschtel mich durch Bücher, weil ich versuche, irgendwas hinzukriegen, das scheinbar nicht machbar ist. Ich hatte nicht die Absicht, die Kreise der Wissenden zu stören, sondern ich frage hier, weil ich in den Büchern keine Antworten mehr gefunden habe. Aber scheinbar waren meine Fragen ja falsch.

    Es geht nicht um die Form, wie ich eigentlich dachte, klargemacht zu haben. Gerne lösche ich auch die entsprechenden Passagen wieder, damit sie nicht zu Verwirrung führen. Es geht darum, wie ich das laufende Programm dazu bringe, sobald 'C' und nur 'C' gedrückt wird, die aktuell eingegebene Zeile zu löschen, egal, was da steht, und sobald 'A' gedrückt wird, alles zu beenden. Wie man es von einem kleinen Taschenrechner kennt. Wenn '=' eingegeben wird, soll es wie 'Enter' wirken. (Das war der Grund, weshalb mich getline interessierte.)

    Aber gut, es scheint ja doch machbar zu sein. Und was ist dieser "systemabhängige Code", von dem du da schreibst? Davon höre ich zum ersten Mal. Woher weiß ich, was ich da für Befehle brauche? Gibt es da eine eigene Bibliothek?

    Gruß


  • Mod

    Trekkiebraut schrieb:

    Du musst mich nicht zusammenfalten, bloß weil ich mich vielleicht unklar ausdrücke. Ich wurschtel mich durch Bücher, weil ich versuche, irgendwas hinzukriegen, das scheinbar nicht machbar ist. Ich hatte nicht die Absicht, die Kreise der Wissenden zu stören, sondern ich frage hier, weil ich in den Büchern keine Antworten mehr gefunden habe. Aber scheinbar waren meine Fragen ja falsch.

    Du verstehst nicht. Du störtst hier niemanden, dies ist ein freiwilliges Hilfeforum. Ich habe lediglich versucht, dir zu erklären, wieso du trotzdem keine Antwort bekommen hast. Eben weil nicht klar ist, was du wissen möchtest.

    Aber gut, es scheint ja doch machbar zu sein. Und was ist dieser "systemabhängige Code", von dem du da schreibst? Davon höre ich zum ersten Mal.

    Code der nur für ein bestimmtest System funktioniert. Zum Beispiel nur unter Windows, weil er die windowseigenen Funktionen zum Ansprechen der Tastatur benutzt. Oder nur unter Mac, weil er die maceigenen Funktionen zum Ansprechen der Tastatur benutzt.

    Woher weiß ich, was ich da für Befehle brauche?

    Indem du fragst. Aber nicht hier, sondern in dem passenden Unterforum für das System (oder die Systeme) auf die du abzielst. Da du ausdrücklich von Tastaturen sprichst, nehme ich mal an, dass dein Programm hinterher nicht aus einem tastenlosen Toaster laufen soll das wäre mit jedem standardkonformen C++-Programm möglich), sondern dass du dich auf eine bestimmte Art von System beschränkst.

    Gibt es da eine eigene Bibliothek?

    Ja. Die Systembibliotheken des Zielsystems eben. Die WinAPI in Windows. Der POSIX-Standard. Oder aber auch auf höherem Niveau GUI-Frameworks, die einem viel low-level Gefrickel mit diesen Systembibliotheken abnehmen können und in manchen Fällen sogar auf mehreren verschiedenen Systemen laufen (eben weil sie intern Code für verschiedene Systeme haben, so wie ich dir vorgeschlagen habe). Guck zum Beispiel hier:
    http://www.c-plusplus.net/forum/81596
    Aus dem Link:

    rüdiger schrieb:

    Ohne fundierte C++ Kentnisse ist es nicht zu empfehlen ein GUI Toolkit zu benutzen. Lieber erst vernünftig C++ lernen!

    QFT!



  • und nun nach Details fragst, die einfach keinen Sinn machen, da der Ansatz falsch ist

    Alles, was ich daraus lese ist: "Selbst schuld! Du hast keine Ahnung, wovon du redest." Hätte ich einen im Sinne des Erfinders "richtigen" Ansatz, hätte ich wohl auch "richtige" Fragen gestellt und wäre wahrscheinlich garnicht hier...

    Vielen Dank für das Verlinken zum GUI-Artikel. Leider sind die Links veraltet.


Anmelden zum Antworten