erklärung bitte (leicht!)



  • auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt.. bau alles aufeinander auf...;)



  • BorisDieKlinge schrieb:

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt..

    dafür werden dich die hardcore c++ freaks gleich steinigen 😉



  • BorisDieKlinge schrieb:

    ist wie bei der mathematik..

    Genau.

    als amateur muss man auch alle rechenschritte aufschreiben als fortgeschrittener schon weniger und als profi geht schon fast alles in koopff..;)

    Umgekehrt wird ein Hut draus. Als "Anfänger" akzeptiert man in der Mathematik, dass 0 < 1 und dass 1 + 1 = 2. Als Profi beweist man es.

    Genauso sollte man beim Programmierenlernen vorgehen. Wie der String unter der Haube aussieht, ist vollkommen egal. Ich habe eine Box, in der Buchstaben in einer Reihe stehen, ich kann einen Inhalt in die Box einlesen, ich kann einzelne Elemente herausgreifen. Mehr brauche ich nicht zu wissen. Insbesondere Beschränkungen wie "maximal 20 Zeichen" -- oder genau das Gegenteil, explizite dynamische Speicherverwaltung, ist in der Erklärung einfach kontraproduktiv, da diese weltlichen Details vom eigentlichen Punkt der Übung ablenken -- nämlich etwas einzulesen und rückwärts zu durchlaufen.

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt.. bau alles aufeinander auf...;)

    Genau das ist Quatsch. Was interessiert es mich, ob 'string' intern ein Feld von Zeichen benutzt, ob es eine verkette Liste ist oder ob im inneren kleine Feen hin und her schwirren und mit ihrem magischen Zauberstab die richtigen Zeichen abstubsen?

    Ich empfehle in diesem Zusammenhang eine Überlegung von Bjarne Stroustrup zum Thema: Learning Standard C++ as a New Language.



  • aha.. d.h. es ist völlig egal wie der hase läuft, hautpsache er läuft....

    d.h. sich erst grad nicht mit einfache char[..} rumschlagen sonder gleich mit string arbeiten ohne zu wissen was dahinter steckt??
    am besten auf pointer verzichten.. alles global anlegen...

    hast informatik studiert?



  • BorisDieKlinge schrieb:

    d.h. sich erst grad nicht mit einfache char[..} rumschlagen sonder gleich mit string arbeiten ohne zu wissen was dahinter steckt??

    Ja.

    am besten auf pointer verzichten..

    Du hast es begriffen.

    alles global anlegen...

    Oder doch nicht?

    hast informatik studiert?

    Ich studiere es momentan im fünften Semester (Bioinformatik). Aber das tut nichts zur Sache, da man sowas in Informatik nicht lernt. Von uns wird erwartet, dass wir sowas können.



  • aha und kannst es... ??



  • BorisDieKlinge schrieb:

    aha.. d.h. es ist völlig egal wie der hase läuft, hautpsache er läuft....

    👍



  • hehe.. naja egal.. müsst ja nich meiner meinung sein..

    mich interessrt es einfach was in den tiefen des codes vor sich geht...
    um auch verständs bi problembehandlungen zu haben...



  • BorisDieKlinge schrieb:

    mich interessrt es einfach was in den tiefen des codes vor sich geht...

    Natürlich, und das ist auch sehr wichtig, wenn man C++ programmieren können will. Aber man muss ja nicht alles auf einmal lernen -- und es ist sinnvoll, mit einfachen Dingen -- Eingabe, Ausgabe, simple Manipulation von Objekten -- anzufangen, bevor man sich an die verstrickten Interna macht.



  • Auch wenn man erst Krabbeln lernt und dann Gehen, verhält es sich mit fremden Dingen häufig andersherum: Man lernt erst die Schnittstelle kennen und später dann, wenn man denn möchte und die Möglichkeit bekommt, die Interna. Windows-Programmierung dürfte man ja sonst gar nicht machen, denn da bekommt man gewöhnlich nicht die Möglichkeit sich die Interna anzuschauen, sondern muss sich mit den Schnittstellen (API) und deren Beschreibung zufrieden geben. Aber das ist nicht nur in der Programmierung so; z. Bsp. lernt man gewöhnlich schon als kleines Kind, dass man ein Auto mit einem Lenkrad lenken kann und erst später, dass sich eine Lenkstange dahinter befindet. Wenn man möchte kann man dann tiefer in die Materie einsteigen und KFZ-Mechanik lernen. Ebenso sollte man es mit den Zeichenketten handhaben; die Benutzung der C++ Strings ist weitaus komfortabler und sicherer als die zugrundeliegenden, gezähmten, C Strings. Wenn man irgendwann mal eine eigene String-Klasse schreiben will, kann man sich immer noch mit C Strings beschäftigen.



  • ich denke du vergleichst ganz andere objekte miteinander, je mehr man am anfang über ein problem nachdenkt desto schneller findet man für neue Programme die Lösung.

    man sollte sich erstmal mit dem elementaren vertraut machen bevor man zusätliche bibliotheken anwendet

    ein unsinniger vergleich:

    wozu verkehrsregeln lernen ? wenn ich paar kilometer gefahren bin werd ichs schon merken was man darf und nicht darf



  • Stelfer schrieb:

    man sollte sich erstmal mit dem elementaren vertraut machen bevor man zusätliche bibliotheken anwendet

    Die STL ist aber keine zusätzliche Bibliothek, sie ist elementar.



  • Ich habe nicht gesagt, man soll sich nicht mit der Schnittstelle der C++ String-Klasse auseinandersetzen. Es geht hier NICHT darum, dass man nur durch Trial & Error lernen soll, im Gegenteil. Ich habe auch mit C Strings angefangen, weil wir im Studium mit C angefangen haben. Meiner Meinung nach kommt man bei C Strings eher mit "Lernen durch Trial & Error" in Kontakt, als bei C++ Strings. Ich habe von anderen Objekten gesprochen, aber die Analogie bezog sich auf Schnittstellen und das was dahinter steckt. Wie genau das realisiert ist, was hinter einer Schnittstelle steckt muss man nicht wissen. Es geht um den Zweck und die korrekte Verwendung der Schnittstelle. Im Gegensetz zum Lenkrad mit versteckter Lenkstange haben die Verkehrsregeln in erster Linie herzlich wenig mit einer Schnittstelle und dahinter versteckter Funktionalität zu tun. Man könnte die Verkehrsregeln aber als eine Spezifikation ansehen, auf deren Basis man versteckte Funktionalität mit einer sichtbaren Schnittstelle implementiert, die Autos zwingt, sich an diese Regeln zu halten. Und wieder müsste der Fahrer nicht wissen, wie genau die versteckte Funktionalität implementiert ist, sondern nur die Schnittstelle kennen um z. Bsp. die Regeln dem Land entsprechend, zu konfigurieren.
    Wie schon gesagt, in C++ muss man sich erst mit C Strings auseinandersetzen, wenn man seine eigene String-Klasse implementieren will oder wenn man dazu gezwungen wird. Ansonsten ist es genauso freiwillig, wie das Einbetten von Inline-Assembler.



  • Es gibt schlechtere Bücher als "Objektorientiertes Programmieren von Anfang an".

    Im übrigen ist der Ausgangspunkt der Diskussion das Verstehen der for-Schleife, die noch aus C stammt.

    Ich denke, dass man die Klasse string erst dann wirklich versteht, wenn man selbst zumindest rudimentär versucht hat, z.B. auf Basis von char eine solche Klasse zu schreiben.



  • net schrieb:

    BorisDieKlinge schrieb:

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt..

    dafür werden dich die hardcore c++ freaks gleich steinigen 😉

    ... und zwar vollkommen zurecht ! 😉
    Es gibt wirklich KEINEN Grund, Anfänger erst mit char* zu quälen (statt gleich mit string anzufangen) außer:

    • den "C-Hintergrund" des Buchauthors und
    • dessen sadistische "da musste ich auch durch"-Einstellung

    Beides keine Kriterien für gute Didaktik.

    Das regt mich immer wieder auf, weil es vollkommen unnötig Einsteigern das Leben erschwert und dann noch "rufschädigend" für die Sprache ist. Für den richtigen Umgang mit char* muss man einen Haufen Zeug verstanden haben (Zeiger(arithmetik), Heap/Stack, Literale, Arrays, 0-Terminierung, ....) - eigentlich nix für den Anfänger und sein erstes Programm.

    Gruß,

    Simon2.



  • Hallo

    BorisDieKlinge schrieb:

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt.. bau alles aufeinander auf...;)

    Sorry, aber das halte auch ich für Quatsch. Damit kann man sich später beschäftigen. Erstmal sollte man Spaß haben und ein bisschen rumprobieren. Das geht mit char und Kollegen aber nicht wirklich gut.

    chrische



  • BorisDieKlinge schrieb:

    aha.. d.h. es ist völlig egal wie der hase läuft, hautpsache er läuft...

    Das Problem ist, dass amn als Anfänger gar keine Chance hat, zu begreifen, wie der Hase läuft.

    Ich wette mit Dir, dass Du auch erst angefangen hast, char* zu verstehen, als Dir

    • Programmablauf
    • Variablen
    • Konditionen (if)
    • Schleifen

    (und noch einiges mehr) mehr oder weniger in Fleisch ubd Blut übergegangen ist.
    Und für strings kommt noch Einiges weiter dazu (templates, policies, namespaces, ....)

    Im Nachinein unterschätzt man oft die eigenen Lernschritte (in Dauer und Schwierigkeitsgrad) und denkt "ist doch alles logisch - muß man doch einsehen"...
    Denk mal drüber nach, wie lange Du schon "Rechnen/Mathe" in der Schule hattest (von der Zeit davor mal ganz zu schweigen), bevor Du das erstmal einen mathematischen Satz bewiesen hast....

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Für den richtigen Umgang mit char* muss man einen Haufen Zeug verstanden haben (Zeiger(arithmetik), Heap/Stack, Literale, Arrays, 0-Terminierung, ....) - eigentlich nix für den Anfänger und sein erstes Programm.

    das ist aber, nach meiner meinung (bis auf zeigerarithmetik), alles ziemlich banal und auch für einsteiger leicht zu verstehen.

    chrische5 schrieb:

    Erstmal sollte man Spaß haben und ein bisschen rumprobieren. Das geht mit char und Kollegen aber nicht wirklich gut.

    kommt drauf an wie man 'spass' definiert. man kann mit pointern tolle faxen machen. wer ganz drauf verzichten will, kann sich ja einer c++ -verwandten sprache zuwenden, die keine pointer hat.
    aber wir wollen ja nicht schon wieder damit anfangen... 😉
    :xmas2:



  • net schrieb:

    Simon2 schrieb:

    Für den richtigen Umgang mit char* muss man einen Haufen Zeug verstanden haben (Zeiger(arithmetik), Heap/Stack, Literale, Arrays, 0-Terminierung, ....) - eigentlich nix für den Anfänger und sein erstes Programm.

    das ist aber, nach meiner meinung (bis auf zeigerarithmetik), alles ziemlich banal und auch für einsteiger leicht zu verstehen....

    Das gilt definitiv nicht für die Mehrheit der Programmieranfänger !
    (Schau Dir doch nur mal hier im Forum an, wieviele Leute damit Probleme haben)
    Frag' doch mal einen Anfänger, was der Unterscheid zwischen Heap und Stack ist, und wann man aus einem char* lesen oder in ihn schreiben darf. ...

    Ich glaube, da unterliegst Du auch wieder dem (von mir schon beschriebenen) "Fehlschluss"...

    Gruß,

    Simon2.



  • Hallo

    net schrieb:

    chrische5 schrieb:

    Erstmal sollte man Spaß haben und ein bisschen rumprobieren. Das geht mit char und Kollegen aber nicht wirklich gut.

    kommt drauf an wie man 'spass' definiert. man kann mit pointern tolle faxen machen. wer ganz drauf verzichten will, kann sich ja einer c++ -verwandten sprache zuwenden, die keine pointer hat.
    aber wir wollen ja nicht schon wieder damit anfangen... 😉
    :xmas2:

    Mir geht es nicht darum, ob Zeiger überhaupt wichtig und gut sind, sondern nur darum, ob man dies als Anfänger sofort verstehen kann.
    Ich habe es bereits auch in einen anderen Thread geschrieben, aber bei OOP ist es doch auch so, dass man nur die Schnittstellen der Klassen kennen muss und sich eigentlich keine Gedanken darüber machen braucht, was da intern passiert.
    Für mich ist das gerade bei std::string und char das gleiche. Es spielt doch für mich als Benutzer keine Rolle, was da intern passiert.
    Oft passiert es doch dann, dass Anfänger sich mit Dingen wie: Ich will alles selber machen und programmiere mir deswegen meine eigene Engine, string-Klasse oder vector-Klasse. Was soll denn das. Nutzt doch die Arbeit anderer und beschäftige dich mit deinen Programm.

    chrische


Anmelden zum Antworten