Objektorientiertes Programmieren Anfängerhilfe



  • An Werner Salomon:
    Danke für deinen hilfreichen Code, die Kommentare sind sehr gelungen besonders gut gefällt mir "wenn Du Zahlen willst, so lese Zahlen".
    Ich wusste nicht das man direkt Zahlen also double-Variablen aus einer datei lesen kann. Ich dachte erst string dann in double wandeln.....

    An CStoll: Danke das ich nicht initialisiert habe war vllt mein fehler.
    ergebnis ist eine private variable der klasse 😉

    An fr33g: Danke aber Werner Salomon hat den fehler behoben. Das Programm bescheht aus den Dateien main, header und methoden. im header steht die klasse. in methoden sind die methoden der klasse und main ist denke ich klar ;).



  • Was verstehst du denn unter "auslesen"?

    Ansonsten solltest du die Aufgaben sauber trennen - eine Klasse liest bzw. schreibt die Zahlen aus Dateien, die andere rechnet mit den Zahlen. Sonst endest du mit einem halben Dutzend Klassen, die alle fast den selben Code besitzen und sich nur in der angewendeten Rechenoperation unterscheiden - und Code-Duplikation ist immer ein schlechtes Omen.



  • Ja, irgendwo denke ich du/sie haben/hast recht aber da wir gerade mit dem Spaß angefangen haben kann ich da echt nix zu sagen, ich bin erstmal froh das ich ein programm was eigendlich 20 zeilen hat auf 3 dateien gesplittet habe.
    ...danke trotzdem.



  • Ich weiß nicht so wirklich was du uns mit dem letzten Post sagen wolltest ;o



  • runystar schrieb:

    brotbernd schrieb:

    Und eines der wichtigsten Prinzipien der OOP ist das "Single responsibility principle". Das Lesen von Dateien liegt mit Sicherheit nicht im Zuständigkeitsbereich einer Addition (Oder diese Klasse ist schlecht benannt).

    ehm ja wieso schlecht benannt?!

    Hallo runystar,

    der Kern des Problems liegt wohl darin, dass die C++-Klasse addition keine(!) Klasse im Sinne von OOP ist. Was eine Klasse im Sinne von OOP ist, kann ich Dir aber leider nicht in drei Sätzen erklären.

    runystar schrieb:

    es gibt die Klasse "addition" in ihr sind dann daten_einlesen und daten_auslesen
    definiert.
    einlesen: daten aus datei holen und addieren
    auslesen: addierte zahlen auslesen

    Ich vermute mal, dass bis auf den Dateinamen beide Methoden nichts miteinander zu tun haben. D.h. beide Methoden könnte auch leicht als frei stehende Funktionen realisiert werden, ohne dass Du in Deinem main irgendetwas an Funktionalität einbüßt.
    Das wäre es, was ich mit 'keine Klasse im Sinne von OOP' meine.

    Gruß
    Werner



  • Kannst du eventuell mal das komplette Projekt vorstellen und genau erklären, was ihr eigentlich vorhabt? Vielleicht wird es dann für uns leichter, sachtaugliche Hinweise anzubieten.
    Mit dem Fragement kann ich nur eins sagen: nur weil du in deinem Programm "class" verwendest, ist es noch lange nicht objektorientiert.

    PS: Und die Addition würde ich sogar noch kürzer hinbekommen:

    ifstream file(Dateiname.c_str());
    double ergebnis = accumulate(istream_iterator<double>(file),istream_iterator<double>(),0.0); //Edit: richtigen Startwert angegeben
    return ergebnis;
    


  • CStoll schrieb:

    PS: Und die Addition würde ich sogar noch kürzer hinbekommen:

    ifstream file(Dateiname.c_str());
    double ergebnis = accumulate(istream_iterator<double>(file),istream_iterator<double>(),0);
    return ergebnis;
    

    👍



  • Danke das ihr euch so bemüht habt, ich konnte mein problem beheben.



  • 314159265358979 schrieb:

    CStoll schrieb:

    PS: Und die Addition würde ich sogar noch kürzer hinbekommen:

    ifstream file(Dateiname.c_str());
    double ergebnis = accumulate(istream_iterator<double>(file),istream_iterator<double>(),0);
    return ergebnis;
    

    👍

    bei aller Begeisterung für diese Konstruktion, so enthält sie doch einen groben Fehler. Wer es nicht glaubt, probiere es doch mal, damit die Summe von den zwei Zahlen

    2.5
    3.5
    

    zu bestimmen. Das Ergebnis obigen Programms ist in diesem Fall nicht 6.

    Gruß
    Werner



  • Krümelkacker :p Das kommt davon, wenn ich keinen C++ Compiler greifbar habe.
    *korrigiert den Code*
    Jetzt müsste es aber stimmen, oder hast du noch mehr Probleme?



  • Dass ein Punkt so einen Unterschied macht 😉

    CStoll schrieb:

    Krümelkacker :p Das kommt davon, wenn ich keinen C++ Compiler greifbar habe.

    http://ideone.com/452B5 🙂



  • Ich schreibe meist aus dem Gedächtnis, aber nach Werners Hinweis hatte ich den Code doch mal codepad.org gejagt - und der hat mich auch auf diesen Punkt aufmerksam gemacht 😃
    (vielleicht sollte ich mir einen dieser Online-Compiler für Notfälle bookmarken)


Anmelden zum Antworten