Zeiger in C++



  • Hallo Community (: bin neu hier und hab gleich ne wichtige Frage:
    Also, ich hab mir zu Ostern ein C++ Buch zugelegt (C++ von A bis Z von Jürgen Wolf). Hab nie richtig Zeit dafür gefunden, aber jetz vor 1 Woche mal endlich angefangen. Buch ist auch super verständlich und alles nur:
    Zeiger, ich verstehe, was sie tun. Ich kann mir auch vorstellen wofür man sie später brauchen kann wenns dann um Klassen und alles geht(habe Erfahrung von Java). Nur:
    Braucht man Zeiger, wenn sie in Verbindung mit Basisdatentypen und Arrays stehen, nur um dynamische Speicherobjekte anzulegen. Sprich dass man sie zu jeder x-beliebigen Zeit zur Laufzeit erstellen und löschen kann ? Weil sonst hab ich beispielsweise noch keinen Unterschied zwischen int array[5]; und int *pointer = new int[5]; festgestellt, außer dass das 2te dynamisch ist.
    Kann mir das jemand beantworten (: wäre wichtig fürs weitere Verständniss im Buch.
    😃 wäre echt nett !



  • MrDeathly schrieb:

    ...ich hab mir ... ein C++ Buch zugelegt (C++ von A bis Z von Jürgen Wolf).

    Grundsätzlich eher ein Fehlgriff (Besser C++ Primer oder Thinking in C++, letzteres ist frei im Internet verfügbar). Der Stil in diesem Buch ist ein Mischmasch von C und C++.

    MrDeathly schrieb:

    Ich kann mir auch vorstellen wofür man sie später brauchen kann wenns dann um Klassen und alles geht(habe Erfahrung von Java).

    Gerade wenn du Java erwähnst... tritt nicht in die "new"-Falle. In C++ kann man Objekte auch auf den Stack anlegen (was ein üblicher Weg ist), und nur wenn man Datentypen (egal was für ein Typ) dynamisch verwalten will, benötigt man new/delete.

    Weil sonst hab ich beispielsweise noch keinen Unterschied zwischen int array[5]; und int *pointer = new int[5]; festgestellt, außer dass das 2te dynamisch ist.
    

    Arrays sind ein C-Relikt (Imho besser std::tr1::array oder std::vector) mit einigen "Sonderfällen". Die Besonderheit ist z.B. das du den "pointer" auch über die Indesoperatoren anwenden kannst, in anderen Fällen wäre hier eine Zuweisung usw. nötig. Zudem musst du etwas, das du mit new/new[] allokierst auch mit delete/delete[] freigeben.

    Ich würde dir raten erstmal nach einen anderen Buch zu schauen, es sei den du möchtest ein C/C++ Mischmasch lernen.

    Edit: Vielleicht hilft dir ein Blick in die FAQ



  • Also ich denke, du sagst das nur, weil er auch das Buch "C von A bis Z" geschrieben hat. Außerdem ist es oft hilfreich, Sachen aus C zu kennen (bsp: C-Strings). Außerdem hat es die besten Rezensionen überhaupt, wenn es um C++ bürcher geht.

    Gerade wenn du Java erwähnst... tritt nicht in die "new"-Falle. In C++ kann man Objekte auch auf den Stack anlegen (was ein üblicher Weg ist), und nur wenn man Datentypen (egal was für ein Typ) dynamisch verwalten will, benötigt man new/delete.

    Das war mir auch vorher klar aber danke (:

    naja richtig hilfreich war das jetzt nicht, aber danke !



  • Das ist kein C++ Buch! 🕶



  • MrDeathly schrieb:

    Also ich denke, du sagst das nur, weil er auch das Buch "C von A bis Z" geschrieben hat. Außerdem ist es oft hilfreich, Sachen aus C zu kennen (bsp: C-Strings). Außerdem hat es die besten Rezensionen überhaupt, wenn es um C++ bürcher geht.

    Nein. Das kommt aus der Erfahrung von Anfängern, die mit dem Buch angefangen haben und hier fragen stellen. Es hat afaik auch Fehler drin.

    Ich kenne das Buch selbst nicht, aber dass er auch ein C Buch geschrieben hat, hat bestimmt auch einen Einfluss auf das C++ Buch.



  • Ja na klar hat er es auch manchmal mit C zu tun ^^
    aber ist das wirklich ein Nachteil ? Vor allem wenn man weiss, wann man etwas über C lernt und wann etwas über C++ ? Ich meine, zu allen Sachen, die man aus C gelernt bekommt, bekommt man auch die Alternative, die oft nichteinmal besser ist, aus C++ gelernt.
    Außerdem hab ich auch nochnie jemanden sagen hören, Sachen aus C zu kennen ist schlecht, wenn man C++ lernt (:



  • Das Problem bei guten Rezensionen ist, dass viele Anfänger zu ihnen tendieren, nachdem sie glauben, richtig viel gelernt zu haben. Unabhängig davon, wie viel von C++ für sie tatsächlich Halb- oder Unwissen ist. Sei vorsichtig mit Rezensionen und frag nächstes Mal z.B. lieber bei einem Fachforum nach.

    Es gibt hier ab und zu Leute, denen erst durch dieses Forum klar wird, wie wenig Ahnung sie von C++ eigentlich haben (ich gehörte vor ein paar Jahren ebenfalls dazu, da ich damals auch nicht die besten Bücher hatte). Unterschätze gute C++-Literatur nicht, so rar sie auch sein mag.



  • MrDeathly schrieb:

    Ja na klar hat er es auch manchmal mit C zu tun ^^
    aber ist das wirklich ein Nachteil ? Vor allem wenn man weiss, wann man etwas über C lernt und wann etwas über C++ ? Ich meine, zu allen Sachen, die man aus C gelernt bekommt, bekommt man auch die Alternative, die oft nichteinmal besser ist, aus C++ gelernt.

    Bist du sicher, dass einem stets die Alternativen gezeigt werden und kein C als C++ verkauft wird? Ein angesprochenes Beispiel, das in C++ nicht besser gelöst ist, würde mich auch interessieren. 😉

    MrDeathly schrieb:

    Außerdem hab ich auch nochnie jemanden sagen hören, Sachen aus C zu kennen ist schlecht, wenn man C++ lernt (:

    Solange die Kenntnis der C-Möglichkeiten nicht auf Kosten modernerer C++-Mittel geht, ist sie nur vorteilhaft. Oft wird dann aber sowas unter Vorwänden wie Effizienz im Produktivcode angewendet, und man macht sich mehr Mühe als nötig, ohne dabei etwas zu gewinnen.



  • Wenn du C++ programmierst, dann solltest du C++ programmieren und nicht C. Das mag für einen Anfänger noch recht unanschaulich sein, aber C und C++ unterscheiden sich GRUNDLEGEND, wie man an Probleme rangeht. Von der Implementierung sogar mal abgesehen, welche ebenfalls oft in C und C++ recht anderst geschieht.

    Z.B den von dir genannte C-String. Ein C++ Programmierer wird kaum einen C-String brauchen, sondern eine dafür geeignete Klasse (oder halt template). Klar ist das wissen, wie man mit C-Strings umgeht wichtig, aber in einem C++ Programm wirst du den nicht verwenden.



  • Naja dann mal so:
    Gibt es hier jemaden der das Buch ernsthaft kennt und mir sagen kann was er davon hält ?! Ich meine diese je 5 Seiten C auf rund 100 Seiten C++ . Was ist schlimm dran ? Vor allem du bekommst ja nichtnur Syntax vermittelt, sondern auch weiters Wissen wie: Speicherobjekte im Heap, Stack-Frames, viele Fachbegriffe wie case sensitive, call by value und reference, Iteration, Selektion, und und und.
    Ich hab jetzt in dieser Woche schon mehr Verständniss über C++ bekommen, als in einem Jahr, in dem wir in Java Pacman programmiert haben und ich mir noch n Java Buch reingezogen hab.



  • MrDeathly schrieb:

    Gibt es hier jemaden der das Buch ernsthaft kennt und mir sagen kann was er davon hält ?!

    Falls du meinen unqualifizierten Worten Glauben schenken willst: hier hat noch nie jemand etwas positives über das Buch gesagt. Man ist sich einig, dass es ziemlicher Dreck ist.

    Edit: ich habs nicht gelesen, aber die teils haarsträubenden Probleme und Fragen derjenigen, die laut eigener Aussage mit dem Buch lernen und hier posten, sind ein guter Indikator für die Richtigkeit dieser Auffassung.



  • Hm, hat sich ja schon gelohnt hier ne Frage gestellt zu haben (:
    Was hättet ihr für Empfehlungen? Evtl. auch Openbooks, wenn sie gut sind?
    Wenn des Buch wirklich so schlecht sein soll, dann werd ich wohl td umsteigen(obwohl ich es nichtmal schlecht finde bis jetzt). Trotz der 40 euro Kaufpreis.



  • asc hat bereits 2 Bücher genannt. Eines davon ist sogar ein OpenBook.

    Ansonsten gibt es hier noch Literatur:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-251551.html



  • MrDeathly schrieb:

    Gibt es hier jemaden der das Buch ernsthaft kennt...

    Nein, aber durch das Inhaltsverzeichnis erkennt man schon sehr viel (Wozu ein Buch kaufen, wenn man den Inhaltsverzeichnis schon eine Fachfremdheit ansieht). Versteh mich nicht falsch: Ein paar der Dinge die er erwähnt könnten vielleicht Sinn machen, aber nicht in dieser Reihenfolge. Und einige Angaben sind schlicht und ergreifend... nunja.

    Ich musste schon bei der Überschrift "Die neuen Streams – cout, cin..." lächeln. Warum "neu"? Die sind seit 1998 offizieller Teil des C++ Standards.

    Und warum wird im Kapitel "Höhere und fortgeschrittene Datentypen" erst einmal C zum Abwinken durchgenommen? Es macht zwar durchaus auch mal Sinn auf die interna einzugehen, aber muss das gleich am Anfang sein? (Zumal C-Strings und Arrays nun wirklich nicht die Krone der Schöpfung sind; und man nicht noch extra die C-Kompatibilitätsheader ansprechen muss, wenn es Alternativen gibt - die C++ Stringbehandlung kommt erst einige Kapitel später).

    "C-Funktionen bzw. Bibliotheken in einem C++-Programm" gehört in einen C++ Buch eher in den Anhang, oder in die letzten Kapitel, als gleich zu Beginn. "Klassen-Array (Array von Objekten)" muss auch nicht mehr sein (Wozu gibt es im C++ Standard die Container?).

    MrDeathly schrieb:

    und mir sagen kann was er davon hält ?! Ich meine diese je 5 Seiten C auf rund 100 Seiten C++ .

    Das Inhaltsverzeichnis spricht eine gänzlich andere Sprache. Es ist nicht verkehrt gewisse Grundkonzepte vermittelt zu bekommen, man muss aber nun wirklich nicht C-Header zu Beginn erläutern, und es ist auch kein Fehler bestimmte Dinge grundlegend zu verwenden, die Details (wie es intern umgesetzt wird) aber etwas später zu durchleuchten.



  • MrDeathly schrieb:

    Also, ich hab mir zu Ostern ein C++ Buch zugelegt (C++ von A bis Z von Jürgen Wolf).

    Gratuliere dir zu deinem Pech. Ich habe auch einst den Fehler gemacht und mir dieses Buch geholt, wie du aus Gründen der Aktualität. Man merkt schnell wenn man das "C von A bis Z" auch hat, dass sein C++ Buch einfach Strg+C und Strg+V aus dem C Buch ist, nur mit leicht erweitertem Inhalt.

    Vergiss das Buch einfach.



  • Hab mir jetzt überlegt C++ Primer zu kaufen ... Deutsch oder Englisch?



  • MrDeathly schrieb:

    Denke ich lege mir jetzt C++ Primer zu. Englisch oder Deutsch ?

    vorweg, du plenkst 😉 (auch ein Fragezeichen hat kein Leerzeichen davor)

    Nimm Englisch. Die deutsche Übersetzung soll zwar auch pasabel sein, aber Englisch musst du so oder so können. Gerade die beste und aktuellste Literatur gibt es nunmal zuallererst auf englisch



  • MrDeathly schrieb:

    Hab mir jetzt überlegt C++ Primer zu kaufen ... Deutsch oder Englisch?

    Vollkommen egal, nur wäre es dann günstiger sich erst einmal das schon erwähnte Thinking in C++ anzuschauen.

    Es stimmt zwar, das man Englisch ohnehin braucht, aber manche lesen in ihrer Heimatsprache deutlich schneller als in einer Fremdsprache.


Log in to reply