I Carsten: anfängerfreundliches C++ Tutorial gesucht

Hallo Leute!

Ich würde gern anfangen mich mit C++ zu beschäftigen.
Ich habe ein bisschen gegoogelt was man dafür brauch und mir daraufhin Qt und CodeBlocks installiert.

Irgendwo hab ich dann noch ein Tutorial für ein "Hallo Welt!"-Programm gefunden aber das reicht mir nicht. Viele andere Seiten zu dem Thema scheinen sehr veraltet.

Ich würde gern versuchen ein paar einfache Windows-Programme zu schreiben, aber da fängt es schon an.

Zum einen hätt ich gern ein Tutorial, welches mir erklärt wie man z.B. erstmal ein Fenster erstellt.
In der Dokumentation zu Qt habe ich dazu ein Beispiel gefunden, leider wirft mir der Compiler dabei einen Fehler aus.
Und da ich mit C++ keine Erfahrung habe, kann ich den Fehler auch nicht korrigieren.
Meine schlechten Englischkenntnisse sind beim Lesen der Doku leider auch nicht besonders hilfreich.

Ich habe auch einen Artikel (leider auch auf Englisch) gefunden, in dem es darum ging welche API man verwenden sollte weil man sich auf die Standard-Schnittstelle wohl nicht immer verlassen kann.
Auch da möchte ich wenns geht von Anfang an "richtig" arbeiten.

Vielleicht sollte ich auch gleich noch erwähnen, dass ich es mir nicht leisten kann teure Software zu kaufen. Deshalb bin ich auf OpenSource o. Freeware angewiesen.

Kennt jemand ein paar gute, einsteigerfreundliche Tutorials auf deutsch oder mit deutscher Übersetzung? Das Qt-Handbuch vermittelt mir leider nur wenig.

Carsten

  1. Hello,

    Ich würde gern anfangen mich mit C++ zu beschäftigen.
    Ich habe ein bisschen gegoogelt was man dafür brauch und mir daraufhin Qt und CodeBlocks installiert.

    Irgendwo hab ich dann noch ein Tutorial für ein "Hallo Welt!"-Programm gefunden aber das reicht mir nicht. Viele andere Seiten zu dem Thema scheinen sehr veraltet.

    Ich fand "Addison Wesley - Windows-Programmierung mit C++ (2001)" ganz gut um wieder reinzukommen.
    Das gibt es auch als PDF.

    Leider hast Du keine eMail-Aadresse angegeben ;-))

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom!

      Ich fand "Addison Wesley - Windows-Programmierung mit C++ (2001)" ganz gut um wieder reinzukommen.

      Ist 2001 nicht auch ein bisschen veraltet?

      Das gibt es auch als PDF.
      Leider hast Du keine eMail-Aadresse angegeben ;-))

      Danke für das Angebot! Die Adresse oben ist für 1 Weiterleitung gültig.
      Wenn nicht jemand vorher drauf klickt, kannst du mir die PDF gern schicken.

      Carsten

      1. Hello,

        Ist 2001 nicht auch ein bisschen veraltet?

        C++ ist auch schon etwas älter und soviel hat sich seit 2001 nicht verändert...
        Speuialbibliotheken muss man sich wohl sowieso extra anschauen.

        Liebe Grüße aus dem tropfenden Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo,

          Ist 2001 nicht auch ein bisschen veraltet?

          C++ ist auch schon etwas älter und soviel hat sich seit 2001 nicht verändert...

          Verwendet dein Buch char-Arrays oder std::string? Wird auf die Möglichkeiten der STL (Container, Iteratoren, Algorithmen) ausführlich eingegangen oder wird durchgehend new/delete mit Arrays benutzt? Wie umfassend sind die Kapitel zu Templates und generischer Programmierung?

          C++ hat sich durchaus verändert und IMHO gibt es keinen Grund Anfängern veraltete Lehrbücher zu empfehlen, wenn es weitaus bessere und aktuellere Werke gibt (z.B. den C++ Primer).

          Gruss,
          OhneName

          1. Hello,

            Verwendet dein Buch char-Arrays oder std::string? Wird auf die Möglichkeiten der STL (Container, Iteratoren, Algorithmen) ausführlich eingegangen oder wird durchgehend new/delete mit Arrays benutzt? Wie umfassend sind die Kapitel zu Templates und generischer Programmierung?

            Das hast Du Recht. Das ist in den 300 Seiten Grundlagen noch nicht drin.
            Dafür gibt es aber Zusatzliteratur...

            z.B. http://www.sgi.com/tech/stl/

            Wenn man alles in einem Werk haben will und das auch noch verständlich bleiben soll, Übungen und Lösungen behinhalten soll, dann wird das leicht über 1.400 Seiten stark.

            siehe: C++ von A-Z von Jürgen Wolf
            http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1278?GalileoSession=43290047A4.q78.nG50

            Und darin fehlen dann auch noch einige Dinge.
            Mir hat es aber auch gefallen, aber erst als zweites Buch zum Thema.

            Es gibt aber wohl auch eine ergänzte Neuauflage
            http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2156?GalileoSession=43290047A4.q78.nG50

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo,

              Das hast Du Recht. Das ist in den 300 Seiten Grundlagen noch nicht drin.
              Dafür gibt es aber Zusatzliteratur...

              Womit wir wieder beim Problem der Komplexität von C++ angekommen wären. Das Standardwerk von Bjarne Stroustroup The C++ Programming Language hat glaube ich auch über 1000 Seiten.

              siehe: C++ von A-Z von Jürgen Wolf

              ich muss sagen von diesem Buch habe ich bisher fast nur schlechtes gehört, wobei ich es selbst nicht gelesen habe. Vielleicht bist du ja aber auch deswegen besser damit zurechtgekommen als mancher Anfänger, weil du vorher bereits ein anderes Buch gelesen hattest.

              Gruss,
              OhneName

              1. Hello,

                siehe: C++ von A-Z von Jürgen Wolf

                ich muss sagen von diesem Buch habe ich bisher fast nur schlechtes gehört, wobei ich es selbst nicht gelesen habe. Vielleicht bist du ja aber auch deswegen besser damit zurechtgekommen als mancher Anfänger, weil du vorher bereits ein anderes Buch gelesen hattest.

                Ja, das meinte ich auch so. Es ist für Anfänger mMn auch nicht geeignet. Ich hatte vorher schon intensiv C und ein wenig C++ programmiert (das war aber über 15 Jahre her) und hatte das Buch von Addison Wesley zuerst zum Wiederauffrischen genommen.

                Aber wenn man dann das Internet z.B: http://www.cplusplus.com/ für Nachschlageseiten dazu nimmt, kommt man mit dem C++ von A-Z Buch ganz schön weit.

                Gute deutschsprachige Literatur zum Thema ist wahrhaftig sehr dürftig.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
  2. Hallo,

    Ich würde gern anfangen mich mit C++ zu beschäftigen.
    Ich habe ein bisschen gegoogelt was man dafür brauch und mir daraufhin Qt und CodeBlocks installiert.

    warum?

    Ich würde gern versuchen ein paar einfache Windows-Programme zu schreiben, aber da fängt es schon an.

    darum vielleicht?

    Vielleicht sollte ich auch gleich noch erwähnen, dass ich es mir nicht leisten kann teure Software zu kaufen. Deshalb bin ich auf OpenSource o. Freeware angewiesen.

    Und warum nutzt Du nicht die einsteigerfreundliche Visual C++ Express Edition? Die gibt's auch in einer deutschen Version.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz!

      [..] und mir daraufhin Qt und CodeBlocks installiert.
      warum?

      Weil das sehr oft empfohlen wurde.

      Und warum nutzt Du nicht die einsteigerfreundliche Visual C++ Express Edition? Die gibt's auch in einer deutschen Version.

      Weil ich das bislang nicht kannte. Danke für den Link!

      Carsten

  3. Hallo,

    Ich würde gern anfangen mich mit C++ zu beschäftigen.

    Eine Programmiersprache lernen ist immer eine gute Idee. Kannst du denn schon eine oder wäre C++ deine erste? C++ ist zwar eine der "mächtigsten" Sprachen, aber leider auch eine der komplexesten.

    Ich habe ein bisschen gegoogelt was man dafür brauch und mir daraufhin Qt und CodeBlocks installiert.

    Qt ist ein sehr umfangreiches Framework, ohne die entsprechenden Grundlagen in C++ wirst du damit nicht sehr viel Freude haben. Zu CodeBlocks würde ich dir empfehlen einen der Nightly Builds aus dem CodeBlocks-Forum zu nehmen, die sind deutlich aktueller als der letzte offizielle Release.

    Irgendwo hab ich dann noch ein Tutorial für ein "Hallo Welt!"-Programm gefunden aber das reicht mir nicht. Viele andere Seiten zu dem Thema scheinen sehr veraltet.

    Ja, leider ist ebenfalls ein Großteil der Bücher hoffnungslos veraltet und sehr viele Tutorials sind gelinde gesagt miserabel. Wenn du erstmal kein Buch kaufen möchtest würde ich dir zu http://www.cpp-tutor.de/cpp/hinweise.html raten. Wenn du dann doch ein Buch kaufen willst, dann schau dir mal den C++ Primer an, der wird häufig Anfängern empfohlen.

    Ich würde gern versuchen ein paar einfache Windows-Programme zu schreiben, aber da fängt es schon an.

    Als Anfänger möchte man immer gleich irgendwelche Fenster. Mit reinem C++ kannst du aber kein einziges Fenster erstellen. Dazu brauchst du immer eine externe Bibliothek wie bspw. die WinAPI oder Qt, aber wie oben schon gesagt: ohne die Grundlagen wirst du nicht sehr weit kommen. Wenn du wirklich C++ lernen willst, dann schreib erstmal nur Konsolenprogramme und arbeite das verlinkte Tutorial durch. Danach wirst du dich auch ohne größere Probleme in GUI-Bibliotheken einarbeiten können.

    Zum einen hätt ich gern ein Tutorial, welches mir erklärt wie man z.B. erstmal ein Fenster erstellt.
    In der Dokumentation zu Qt habe ich dazu ein Beispiel gefunden, leider wirft mir der Compiler dabei einen Fehler aus.
    Und da ich mit C++ keine Erfahrung habe, kann ich den Fehler auch nicht korrigieren.

    Wenn es dir nur darum geht möglichst schnell ein Fenster zu programmieren, dann solltest du lieber eine andere Sprache lernen. Z.B. eine der vielen Basic-Varianten oder Delphi, damit würdest du schneller an dein Ziel kommen.

    Meine schlechten Englischkenntnisse sind beim Lesen der Doku leider auch nicht besonders hilfreich.

    Du wirst dich daran gewöhnen müssen, dass in der Programmierwelt Englischkenntnisse unverzichtbar sind. Viele Dokumentationen sind eben nur in Englisch vorhanden.

    Ich habe auch einen Artikel (leider auch auf Englisch) gefunden, in dem es darum ging welche API man verwenden sollte weil man sich auf die Standard-Schnittstelle wohl nicht immer verlassen kann.
    Auch da möchte ich wenns geht von Anfang an "richtig" arbeiten.

    Von Anfang an richtig wäre es Konsolenprogramme zu schreiben, dann wird dir später die Entscheidung für eine GUI-Bibliothek auch leichter fallen.

    Vielleicht sollte ich auch gleich noch erwähnen, dass ich es mir nicht leisten kann teure Software zu kaufen. Deshalb bin ich auf OpenSource o. Freeware angewiesen.

    Das ist kein Problem, mit Visal C++ Express und CodeBlocks gibt es hervorragende kostenlose Entwicklungsumgebungen und auch im Bereich zusätzlicher Bibliotheken (erst später interessant) gibt es eine sehr große Auswahl im OpenSourcebereich.

    Kennt jemand ein paar gute, einsteigerfreundliche Tutorials auf deutsch oder mit deutscher Übersetzung? Das Qt-Handbuch vermittelt mir leider nur wenig.

    siehe oben. Qt ist meiner Meinung nach einfach zu früh wenn du die Grundlagen noch nicht kennst.

    Gruss,
    OhneName

    1. Hallo!

      Eine Programmiersprache lernen ist immer eine gute Idee. Kannst du denn schon eine oder wäre C++ deine erste? C++ ist zwar eine der "mächtigsten" Sprachen, aber leider auch eine der komplexesten.

      Ich kenne mich wohl einigermaßen in PHP aus. Perl mal ab und zu angerissen.
      MySQL halt noch. Allerdings kann ich nichts perfekt. In PHP bin ich wohl am "weitesten".

      Qt ist ein sehr umfangreiches Framework, ohne die entsprechenden Grundlagen in C++ wirst du damit nicht sehr viel Freude haben. Zu CodeBlocks würde ich dir empfehlen einen der Nightly Builds aus dem CodeBlocks-Forum zu nehmen, die sind deutlich aktueller als der letzte offizielle Release.

      Ich habe Qt und CodeBlocks erstmal wieder deinstalliert und mir das von Vinzenz empfohlene Visual C++ Express besorgt. Bin also bei der Installation.

      Ja, leider ist ebenfalls ein Großteil der Bücher hoffnungslos veraltet und sehr viele Tutorials sind gelinde gesagt miserabel. Wenn du erstmal kein Buch kaufen möchtest würde ich dir zu http://www.cpp-tutor.de/cpp/hinweise.html raten. Wenn du dann doch ein Buch kaufen willst, dann schau dir mal den C++ Primer an, der wird häufig Anfängern empfohlen.

      Danke für den Link und den Buch-Tipp!

      Als Anfänger möchte man immer gleich irgendwelche Fenster. Mit reinem C++ kannst du aber kein einziges Fenster erstellen. Dazu brauchst du immer eine externe Bibliothek wie bspw. die WinAPI oder Qt, aber wie oben schon gesagt: ohne die Grundlagen wirst du nicht sehr weit kommen. Wenn du wirklich C++ lernen willst, dann schreib erstmal nur Konsolenprogramme und arbeite das verlinkte Tutorial durch. Danach wirst du dich auch ohne größere Probleme in GUI-Bibliotheken einarbeiten können.

      Das Problem ist, dass mir für ein Konsolenprogramm kein sinnvolles Beispiel einfällt. Das war wohl auch der Grund warum ich mich zu DOS-Zeiten nicht so für die Programmiererei begeistern konnte und erst relativ spät den Einstieg fand.

      Wenn es dir nur darum geht möglichst schnell ein Fenster zu programmieren, dann solltest du lieber eine andere Sprache lernen. Z.B. eine der vielen Basic-Varianten oder Delphi, damit würdest du schneller an dein Ziel kommen.

      Bei meiner Suche nach etwas geeignetem bin ich auch auf Delphi gestossen. Leider hab ich davon keine OpenSource o. Freeware-Version gefunden sondern nur eine 30 Tage Testversion.

      Du wirst dich daran gewöhnen müssen, dass in der Programmierwelt Englischkenntnisse unverzichtbar sind. Viele Dokumentationen sind eben nur in Englisch vorhanden.

      Kenn ich von der PHP-Doku. Die ist aber inklusive Code-Beispielen und Kommentaren wenigstens schön übersichtlich aufgebaut.

      Von Anfang an richtig wäre es Konsolenprogramme zu schreiben, dann wird dir später die Entscheidung für eine GUI-Bibliothek auch leichter fallen.

      Siehe oben.

      Das ist kein Problem, mit Visal C++ Express und CodeBlocks gibt es hervorragende kostenlose Entwicklungsumgebungen und auch im Bereich zusätzlicher Bibliotheken (erst später interessant) gibt es eine sehr große Auswahl im OpenSourcebereich.

      Oh, dann hätte ich mal CodeBlocks noch nicht deinstallieren sollen?
      Oder meinst du beide unabhängig voneinander?

      Gruss,

      Carsten

      1. Hallo,

        Eine Programmiersprache lernen ist immer eine gute Idee. Kannst du denn schon eine oder wäre C++ deine erste? C++ ist zwar eine der "mächtigsten" Sprachen, aber leider auch eine der komplexesten.

        Ich kenne mich wohl einigermaßen in PHP aus. Perl mal ab und zu angerissen.
        MySQL halt noch. Allerdings kann ich nichts perfekt. In PHP bin ich wohl am "weitesten".

        Das ist schonmal eine gute Grundlage, dann hast du nämlich mit Variablen, If-Abfragen, Schleifen, etc. ja bereits Erfahrung.

        Als Anfänger möchte man immer gleich irgendwelche Fenster. Mit reinem C++ kannst du aber kein einziges Fenster erstellen. Dazu brauchst du immer eine externe Bibliothek wie bspw. die WinAPI oder Qt, aber wie oben schon gesagt: ohne die Grundlagen wirst du nicht sehr weit kommen. Wenn du wirklich C++ lernen willst, dann schreib erstmal nur Konsolenprogramme und arbeite das verlinkte Tutorial durch. Danach wirst du dich auch ohne größere Probleme in GUI-Bibliotheken einarbeiten können.

        Das Problem ist, dass mir für ein Konsolenprogramm kein sinnvolles Beispiel einfällt. Das war wohl auch der Grund warum ich mich zu DOS-Zeiten nicht so für die Programmiererei begeistern konnte und erst relativ spät den Einstieg fand.

        Nicht untypisch, aber praktisch kannst du fast alle Programme auch als Konsolenvariante schreiben. Z.B. ein Adressbuch oder ein einfaches BlackJack-Spiel. Wenn du dann später auch Objektorientierung gut kannst und dich ein wenig mit einer GUI-Bibliothek beschäftigt hast, dann kannst du dir ja immer noch eine grafische Oberfläche zu deinem Programm schreiben.

        Wenn es dir nur darum geht möglichst schnell ein Fenster zu programmieren, dann solltest du lieber eine andere Sprache lernen. Z.B. eine der vielen Basic-Varianten oder Delphi, damit würdest du schneller an dein Ziel kommen.

        Bei meiner Suche nach etwas geeignetem bin ich auch auf Delphi gestossen. Leider hab ich davon keine OpenSource o. Freeware-Version gefunden sondern nur eine 30 Tage Testversion.

        Laut Wikipedia gäbe es da FreePascal mit Lazarus als Entwicklungsumgebung, vor ein paar Jahren gab es auch mit Turbo Delphi eine kostenlose Version. Java oder C# wären auch noch zwei Sprachen, die einen leichteren Einstieg als C++ bieten.

        Das ist kein Problem, mit Visal C++ Express und CodeBlocks gibt es hervorragende kostenlose Entwicklungsumgebungen und auch im Bereich zusätzlicher Bibliotheken (erst später interessant) gibt es eine sehr große Auswahl im OpenSourcebereich.

        Oh, dann hätte ich mal CodeBlocks noch nicht deinstallieren sollen?
        Oder meinst du beide unabhängig voneinander?

        Beides sind Entwicklungsumgebungen, die dir das Programmieren ein wenig komfortabler machen. Probier einfach beide aus und nimm dann die, die dir besser gefällt.

        Gruss,
        OhneName

    2. Hi,

      C++ ist zwar eine der "mächtigsten" Sprachen, aber leider auch eine der komplexesten.

      das darf man wohl mit Fug und Recht behaupten - obwohl ich gefühlsmäßig sagen würde, dass diese Einschätzung auf Java auch zutreffen könnte. Ich kenne Java aber nur vom flüchtigen Ansehen, kann das also nicht wirklich beurteilen.

      Irgendwo hab ich dann noch ein Tutorial für ein "Hallo Welt!"-Programm gefunden aber das reicht mir nicht. Viele andere Seiten zu dem Thema scheinen sehr veraltet.
      Ja, leider ist ebenfalls ein Großteil der Bücher hoffnungslos veraltet ...

      Das ist aber IMHO gar nicht schlimm, wenn man eine Sprache wie C/C++ lernen möchte, die schon lange existiert. Wenn man nach einem älteren Buch lernt, bekommt man vielleicht nicht die "bleeding edge news" mit, aber doch eine gute Grundlage. Und Neuerungen in bestimmten Themenbereichen kann man sich auch später noch anlesen.

      Ich würde gern versuchen ein paar einfache Windows-Programme zu schreiben, aber da fängt es schon an.
      Als Anfänger möchte man immer gleich irgendwelche Fenster.

      Der Wunsch ist verständlich, finde ich. Ich schließe mich aber auch deiner Empfehlung an, sich erstmal mit dem einfacheren Thema "Konsolen-Anwendungen" an die Programmiersprache und typische Arbeits- und Denkweisen heranzutasten.

      In der Dokumentation zu Qt habe ich dazu ein Beispiel gefunden, leider wirft mir der Compiler dabei einen Fehler aus.

      Carsten, wenn du solche Dinge berichtest - erwartest du dann einen hilfreichen Kommentar? Der Wortlaut der Fehlermeldung wäre zunächst mal das Wichtigste, was du nennen solltest, und natürlich auch den Codeauszug, der die Fehlermeldung verursacht. Compiler geben in Fehlermeldungen fast immer die Zeilennummer an, der tatsächliche Fehler kann aber manchmal auch schon ein paar Zeilen davor liegen.

      Meine schlechten Englischkenntnisse sind beim Lesen der Doku leider auch nicht besonders hilfreich.
      Du wirst dich daran gewöhnen müssen, dass in der Programmierwelt Englischkenntnisse unverzichtbar sind. Viele Dokumentationen sind eben nur in Englisch vorhanden.

      Full ACK. Oder es gibt deutsche Übersetzungen, sie sind aber unvollständig, nicht aktuell, irreführend oder schlicht falsch. Einige Artikel aus MSDN und MS Knowledge Base sind Musterbeispiele für miserable Übersetzungen. Ich habe schon oft vom deutschen Artikel aus die engliche Fassung aufgerufen, weil ich die maschinelle Übersetzung ins Deutsche einfach nicht verstanden habe.

      Ich habe auch einen Artikel (leider auch auf Englisch) gefunden, in dem es darum ging welche API man verwenden sollte weil man sich auf die Standard-Schnittstelle wohl nicht immer verlassen kann.

      Welche Standard-Schnittstelle mag hier gemeint sein?

      So long,
       Martin

      --
      Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
      Erfahrung bekommt man, indem man das nicht tut.
      1. Hallo,

        C++ ist zwar eine der "mächtigsten" Sprachen, aber leider auch eine der komplexesten.

        das darf man wohl mit Fug und Recht behaupten - obwohl ich gefühlsmäßig sagen würde, dass diese Einschätzung auf Java auch zutreffen könnte. Ich kenne Java aber nur vom flüchtigen Ansehen, kann das also nicht wirklich beurteilen.

        Java hat deutlich weniger "Fallstricke" als C++, wodurch es gerade für Anfänger einfacher zu erlernen ist. Zu nennen wäre da die automatische Speicherverwaltung mittels eines Garbage Collectors und das völlige Fehlen von Zeigern. Außerdem ist Java nicht wie C++ weitestgehend C-kompatibel und man kann daher gar nicht erst auf die Idee kommen C zu programmieren.

        Irgendwo hab ich dann noch ein Tutorial für ein "Hallo Welt!"-Programm gefunden aber das reicht mir nicht. Viele andere Seiten zu dem Thema scheinen sehr veraltet.
        Ja, leider ist ebenfalls ein Großteil der Bücher hoffnungslos veraltet ...

        Das ist aber IMHO gar nicht schlimm, wenn man eine Sprache wie C/C++ lernen möchte, die schon lange existiert. Wenn man nach einem älteren Buch lernt, bekommt man vielleicht nicht die "bleeding edge news" mit, aber doch eine gute Grundlage. Und Neuerungen in bestimmten Themenbereichen kann man sich auch später noch anlesen.

        Es gibt keine Sprache C/C++. C und C++ sind eigenständige Programmiersprachen mit grundlegend anderen Denk und Arbeitsweisen. http://david.tribble.com/text/cdiffs.htm, wenn dich interessiert was so alles in C geht und in C++ nicht.

        Das Problem mit den alten Büchern ist, dass sie nur selten die Möglichkeiten von C++98 und vorallem der STL nutzen. Wenn das Hallo-Welt-Beispiel mit #include <iostream.h> und void main() anfängt, dann ist das seit über 10 Jahren schlicht und einfach falsch. Korrekt muss es #include <iostream> und int main() heißen.

        Außerdem fangen viele Bücher viel zu früh mit Zeigern und char-Arrays an. Für Zeichenketten gibt es in C++ std::string und mit auf dem Stack angelegten Variablen (statt new/delete) und Referenzen kommt man auch recht weit. Sowieso tut man gut daran new/delete soviel wie möglich zu vermeiden. Für dynamische Arrays gibts schließlich std::vector<> und für viele andere Fälle passende Smartpointer, die sich um das Freigeben des Speichers kümmern.

        Auch wenn es C++ schon sehr lange gibt, so entwickelt sich die Sprache trotzdem immer noch weiter. Schau dir mal die Boost-Bibliotheken an, wenn dich interessiert was mit "modernem" C++ alles möglich ist und ich denke so hat man vor 10 Jahren C++ noch nicht verwendet.

        Ich habe auch einen Artikel (leider auch auf Englisch) gefunden, in dem es darum ging welche API man verwenden sollte weil man sich auf die Standard-Schnittstelle wohl nicht immer verlassen kann.

        Welche Standard-Schnittstelle mag hier gemeint sein?

        Ich könnte mir vorstllen, dass die Standardschnittstelle für Windows-Betriebssysteme, die WinAPI gemeint war.

        Gruss,
        OhneName

        1. Hi,

          Java hat deutlich weniger "Fallstricke" als C++, wodurch es gerade für Anfänger einfacher zu erlernen ist. Zu nennen wäre da die automatische Speicherverwaltung mittels eines Garbage Collectors und das völlige Fehlen von Zeigern.

          das leuchtet mir ein. Allerdings ist Java konsequenter als C++ auf OOP hin ausgelegt. Objektorientierung ist aber per se anspruchsvoller, weil es von der alltäglichen Denkweise stark abweicht: Wenn jemand sieht, dass im Garten der Rasen gemäht werden muss, dann sieht er nicht das Objekt Garten.Rasen und die Methode Garten.Rasen.maehen(englisch-kurz), sondern die meisten Leute sehen die Arbeit Schritt für Schritt: Rasenmäher aus der Garage holen, Rasenmähermotor starten, mähen, Grasschnitt zusammenrechen, Rasenmäher putzen und aufräumen.
          Wir denken im Alltag überwiegend prozedural, eine objektorientierte Sprache bedeutet also, sich von vornherein ein neues Paradigma anzutrainieren. In C++ kann ich dagegen zunächst intuitiv prozedural anfangen, und die OOP-Features allmählich erlernen und einsetzen, wo sie sinnvoll sind.

          Das ist aber IMHO gar nicht schlimm, wenn man eine Sprache wie C/C++ lernen möchte, die schon lange existiert. Wenn man nach einem älteren Buch lernt, bekommt man vielleicht nicht die "bleeding edge news" mit, aber doch eine gute Grundlage. Und Neuerungen in bestimmten Themenbereichen kann man sich auch später noch anlesen.
          Es gibt keine Sprache C/C++.

          Nein, es sind schon zwei Sprachen. Aber C++ ist im Wesentlichen zu C abwärtskompatibel - vor allem, wenn man die Schlampereien, die C++ zulässt, nicht ausnutzt, sondern weiterhin Disziplin walten lässt (z.B. alle Bezeichner ordentlich am Anfang eines Blocks deklariert). Wegen der Verwandtschaft nenne ich die beiden Sprachen daher normalerweise in einem Atemzug. Wer C++ lernt, hat meiner Ansicht nach automatisch C mitgelernt.

          Das Problem mit den alten Büchern ist, dass sie nur selten die Möglichkeiten von C++98 und vorallem der STL nutzen.

          Das gilt nun speziell für C++, nicht für C.

          Außerdem fangen viele Bücher viel zu früh mit Zeigern und char-Arrays an.

          Ansichtssache. Ich finde, man kann gar nicht zu früh damit anfangen, weil es das Verständnis für die interne Logik und die Abläufe (und auch mögliche Fehler) erheblich fördert.

          Auch wenn es C++ schon sehr lange gibt, so entwickelt sich die Sprache trotzdem immer noch weiter. Schau dir mal die Boost-Bibliotheken an, wenn dich interessiert was mit "modernem" C++ alles möglich ist und ich denke so hat man vor 10 Jahren C++ noch nicht verwendet.

          Ich kenne keine Boost-Bibliotheken, und es interessiert mich auch nicht so brennend, weil ich normalerweise einen Bogen um C++ mache (wenn ich nicht zur Verwendung gezwungen bin) und lieber traditionelles C benutze.

          Ich habe auch einen Artikel (leider auch auf Englisch) gefunden, in dem es darum ging welche API man verwenden sollte weil man sich auf die Standard-Schnittstelle wohl nicht immer verlassen kann.
          Welche Standard-Schnittstelle mag hier gemeint sein?
          Ich könnte mir vorstllen, dass die Standardschnittstelle für Windows-Betriebssysteme, die WinAPI gemeint war.

          Das ergibt wenig Sinn, denn auf die kann man sich *immer* verlassen, wenn man für die Plattform "Windows" entwickelt.

          Ciao,
           Martin

          --
          Einer aktuellen Erhebung zufolge sind zehn von neun Ehefrauen eifersüchtig auf ihren Mann.
          1. Hallo,

            das leuchtet mir ein. Allerdings ist Java konsequenter als C++ auf OOP hin ausgelegt. Objektorientierung ist aber per se anspruchsvoller, weil es von der alltäglichen Denkweise stark abweicht: Wenn jemand sieht, dass im Garten der Rasen gemäht werden muss, dann sieht er nicht das Objekt Garten.Rasen und die Methode Garten.Rasen.maehen(englisch-kurz), sondern die meisten Leute sehen die Arbeit Schritt für Schritt: Rasenmäher aus der Garage holen, Rasenmähermotor starten, mähen, Grasschnitt zusammenrechen, Rasenmäher putzen und aufräumen.

            Pseudocode:
            Garage garage = new Garage();
            Rasenmäher mäher = garage.getRasenmäher();
            mäher.start();
            mäher.mäh(Grundstück.getRasen());
            zusammenrechen();
            putzen(mäher);
            aufräumen();

            Was ist daran jetzt nicht Schritt für Schritt? Ich für meinen Teil finde die objektorientierte Denkweise ziemlich alltäglich.

            Wir denken im Alltag überwiegend prozedural, eine objektorientierte Sprache bedeutet also, sich von vornherein ein neues Paradigma anzutrainieren. In C++ kann ich dagegen zunächst intuitiv prozedural anfangen, und die OOP-Features allmählich erlernen und einsetzen, wo sie sinnvoll sind.

            Du kannst auch in Java "intuitiv prozedural" programmieren. Schreib dir eine Klasse und verwende ausschließlich statische Methoden und statische Klassenvariablen als globale Variablen und schon kannst du prozedural programmieren.

            Nein, es sind schon zwei Sprachen. Aber C++ ist im Wesentlichen zu C abwärtskompatibel - vor allem, wenn man die Schlampereien, die C++ zulässt, nicht ausnutzt, sondern weiterhin Disziplin walten lässt (z.B. alle Bezeichner ordentlich am Anfang eines Blocks deklariert). Wegen der Verwandtschaft nenne ich die beiden Sprachen daher normalerweise in einem Atemzug. Wer C++ lernt, hat meiner Ansicht nach automatisch C mitgelernt.

            Variablen dann zu deklarieren wenn man sie braucht ist IMHO keine Schlamperei sondern der einzig richtige Weg. Variablen sollte man idealerweise bei ihrer ersten Benutzung deklarieren und zwar so, dass sie nur in einem möglichst kleinen Bereich gültig sind und anschließend automatisch zerstört werden.

            Und meiner Meinung nach hat nur derjenige der C-artiges C++ lernt C automatisch mitgelernt. Ich behaupte man kann in C++ zwar wie in C programmieren, aber wer sich auf die Denkweise von C++ einlässt der arbeitet grundsätzlich anders als ein C-Programmierer.

            Das Problem mit den alten Büchern ist, dass sie nur selten die Möglichkeiten von C++98 und vorallem der STL nutzen.

            Das gilt nun speziell für C++, nicht für C.

            Ich dachte hier ginge es ums C++-Lernen? Mit dem Stand der C-Bücher kenne ich mich nicht aus.

            Außerdem fangen viele Bücher viel zu früh mit Zeigern und char-Arrays an.

            Ansichtssache. Ich finde, man kann gar nicht zu früh damit anfangen, weil es das Verständnis für die interne Logik und die Abläufe (und auch mögliche Fehler) erheblich fördert.

            Ja das ist durchaus Ansichtssache und ich halte es ebenfalls für wichtig die interne Logik kennenzulernen. Aber die meißten Anfänger wollen doch erstmal schnell Ergebnisse sehen, oder nicht? Und dazu denke ich sind std::string und std::vector gut geeignet, weil sie weniger fehleranfällig sind als die Arbeit mit char[] und new/delete.

            Auch wenn es C++ schon sehr lange gibt, so entwickelt sich die Sprache trotzdem immer noch weiter. Schau dir mal die Boost-Bibliotheken an, wenn dich interessiert was mit "modernem" C++ alles möglich ist und ich denke so hat man vor 10 Jahren C++ noch nicht verwendet.

            Ich kenne keine Boost-Bibliotheken, und es interessiert mich auch nicht so brennend, weil ich normalerweise einen Bogen um C++ mache (wenn ich nicht zur Verwendung gezwungen bin) und lieber traditionelles C benutze.

            Wenn du dich noch nicht wirklich mit C++ beschäftigt hast dann macht eine Diskussion C vs. C++ in meinen Augen an dieser Stelle wenig Sinn.

            Ich könnte mir vorstllen, dass die Standardschnittstelle für Windows-Betriebssysteme, die WinAPI gemeint war.

            Das ergibt wenig Sinn, denn auf die kann man sich *immer* verlassen, wenn man für die Plattform "Windows" entwickelt.

            dazu müsste man jetzt den Originalartikel kennen, aber vielleicht fällt dieser Punkt ja auch in die Kategorie "Ansischtssache" ;-)

            Gruss,
            OhneName

            1. Hi,

              Objektorientierung ist aber per se anspruchsvoller, weil es von der alltäglichen Denkweise stark abweicht

              Garage garage = new Garage();
              Rasenmäher mäher = garage.getRasenmäher();
              mäher.start();
              mäher.mäh(Grundstück.getRasen());
              zusammenrechen();
              putzen(mäher);
              aufräumen();

              Was ist daran jetzt nicht Schritt für Schritt?

              dein Pseudocode ist aber auch nicht gerade ein typisches Beispiel für Objektorientierung - ich wüsste auch nicht, wie man das besser verdeutlichen könnte. Außerdem hast du vergessen, den Mäher abzustellen. Das kann beim Putzen gefährlich sein! ;-)

              Nein, es sind schon zwei Sprachen. Aber C++ ist im Wesentlichen zu C abwärtskompatibel - vor allem, wenn man die Schlampereien, die C++ zulässt, nicht ausnutzt, sondern weiterhin Disziplin walten lässt (z.B. alle Bezeichner ordentlich am Anfang eines Blocks deklariert). Wegen der Verwandtschaft nenne ich die beiden Sprachen daher normalerweise in einem Atemzug.
              Variablen dann zu deklarieren wenn man sie braucht ist IMHO keine Schlamperei sondern der einzig richtige Weg.

              Findest du? Ich nicht. Wenn ich in der Küche anfange zu kochen oder zu backen, suche ich mir ja auch erst alle Utensilien und Zutaten zusammen, bevor ich überhaupt anfange - und nicht "just in time" wenn ich sie brauche.

              Wer C++ lernt, hat meiner Ansicht nach automatisch C mitgelernt.
              Und meiner Meinung nach hat nur derjenige der C-artiges C++ lernt C automatisch mitgelernt. Ich behaupte man kann in C++ zwar wie in C programmieren, aber wer sich auf die Denkweise von C++ einlässt der arbeitet grundsätzlich anders als ein C-Programmierer.

              Das mag sein, klingt sogar überzeugend. Aber genau diese Denkweise behagt mir nicht, weil sie vom Programmierer verlangt, in weiten Bereichen die Kontrolle abzugeben. Besonders ausgeprägt ist das im Bereich der Speicherverwaltung.

              Das gilt nun speziell für C++, nicht für C.
              Ich dachte hier ginge es ums C++-Lernen?

              Sicher, aber für mich gehört C als Untermenge unbedingt dazu. Sagte ich ja schon.

              Ja das ist durchaus Ansichtssache und ich halte es ebenfalls für wichtig die interne Logik kennenzulernen. Aber die meißten Anfänger wollen doch erstmal schnell Ergebnisse sehen, oder nicht?

              Weiß ich nicht, ich kann da nur für mich sprechen. Und ich will ein System (Werkzeug, Software, Hifi-Anlage, Auto) erstmal bis ins kleinste Detail kennen, bevor ich es wirklich einsetze.

              Ich kenne keine Boost-Bibliotheken, und es interessiert mich auch nicht so brennend, weil ich normalerweise einen Bogen um C++ mache (wenn ich nicht zur Verwendung gezwungen bin) und lieber traditionelles C benutze.
              Wenn du dich noch nicht wirklich mit C++ beschäftigt hast dann macht eine Diskussion C vs. C++ in meinen Augen an dieser Stelle wenig Sinn.

              Eine solche Diskussion könnte ich auch nur sehr einseitig führen. Ich habe nie behauptet, dass ich C++ mit all seinen Möglichkeiten aus dem FF (oder dezimal 255) beherrsche. Und ich habe mich auch tatsächlich noch nicht so intensiv damit beschäftigt, dass mir all diese Features wirklich vertraut sind. Aber zumindest so weit, dass ich erkannt habe: Ich könnte es anwenden, wenn's denn unbedingt sein muss, aber es liegt mir nicht. Manche Programmierer empfinden es vielleicht als Pluspunkt, wenn ihnen gewisse Denkarbeiten und Routineschritte abgenommen werden; ich will das nicht. Ich will noch jedem Bit bei der Arbeit zusehen können, und dafür ist "echtes" C++ zu undurchsichtig. Da läuft für meinen Geschmack zuviel automatisch hinter den Kulissen ab, was ich als Programmierer nicht mehr im einzelnen mitbekomme und auch nicht beeinflussen kann.

              So long,
               Martin

              --
              Kopflosigkeit schützt nicht vor Migräne.
              1. Hallo,

                dein Pseudocode ist aber auch nicht gerade ein typisches Beispiel für Objektorientierung - ich wüsste auch nicht, wie man das besser verdeutlichen könnte. Außerdem hast du vergessen, den Mäher abzustellen. Das kann beim Putzen gefährlich sein! ;-)

                Oh, das kommt davon wenn man eine Schritt für Schritt-Anleitung umsetzt ohne sich dabei selbst Gedanken zu machen *peinlich*. Aber ich hab ja den Inhalt der Klasse Rasenmäher nicht näher gezeigt. Die Methode putzen(Rasenmäher mäher) prüft nämlich zuerst ob der Rasenmäher an ist und wirft in diesem Fall eine DangerToLifeException.

                Was wäre in deinen Augen denn ein typisches Beispiel für Objektorientierung? Ich habe die Garage, den Rasenmäher und das Grundstück als Klassen modelliert. Was hättest du getan?

                Findest du? Ich nicht. Wenn ich in der Küche anfange zu kochen oder zu backen, suche ich mir ja auch erst alle Utensilien und Zutaten zusammen, bevor ich überhaupt anfange - und nicht "just in time" wenn ich sie brauche.

                Angenommen ich koche ein 6-Gänge-Menü in einer 8qm-Küche mit wenig Ablagefläche, dann kann ich es nicht gebrauchen wenn alles voll ist und ich keinen Platz zum Arbeiten habe, weil die Sachen für den 6. Gang auch schon draußen rumliegen. Nein, ich würde wirklich die Sachen erst dann aus der Schublade bzw. aus dem Kühlschrank holen wenn ich sie brauche. Dadurch kann ich mich jederzeit auf den wesentlichen Arbeitsschritt konzentrieren und werde nicht von all den andern Zutaten abgelenkt. Dadurch ist es auch weniger wahrscheinlich, dass ich versehentlich die falschen Zutaten zusammenmische.

                Das mag sein, klingt sogar überzeugend. Aber genau diese Denkweise behagt mir nicht, weil sie vom Programmierer verlangt, in weiten Bereichen die Kontrolle abzugeben. Besonders ausgeprägt ist das im Bereich der Speicherverwaltung.

                Das tolle an C++ ist, dass es dir erlaubt die volle Kontrolle zu behalten. Wenn du die Abstraktionsmechanismen nicht nutzen willst, dann musst du das ja nicht tun. Ich empfehle einem Anfänger, der von PHP kommt, aber lieber die Abstraktionen zu nutzen und erst später, wenn er sicher im Umgang mit der Sprache ist, sich auf die "Low-Level"-Ebene zu begeben.

                Weiß ich nicht, ich kann da nur für mich sprechen. Und ich will ein System (Werkzeug, Software, Hifi-Anlage, Auto) erstmal bis ins kleinste Detail kennen, bevor ich es wirklich einsetze.

                Das will ich auch. Aber ich nehme auch die Abstraktionsmöglichkeiten, die mir eine Programmiersprache bietet, dankbar an. Zurzeit arbeite ich an einem Programm mit weit über 100000 Zeilen Code und ich bin wirklich froh, dass mir die Java Virtual Machine dabei die Speicherverwaltung abnimmt. Viele Stellen sind so schon kompliziert genug und es ist auch dementsprechend schwer den Überblick zu bewahren.

                Eine solche Diskussion könnte ich auch nur sehr einseitig führen. Ich habe nie behauptet, dass ich C++ mit all seinen Möglichkeiten aus dem FF (oder dezimal 255) beherrsche. Und ich habe mich auch tatsächlich noch nicht so intensiv damit beschäftigt, dass mir all diese Features wirklich vertraut sind. Aber zumindest so weit, dass ich erkannt habe: Ich könnte es anwenden, wenn's denn unbedingt sein muss, aber es liegt mir nicht. Manche Programmierer empfinden es vielleicht als Pluspunkt, wenn ihnen gewisse Denkarbeiten und Routineschritte abgenommen werden; ich will das nicht. Ich will noch jedem Bit bei der Arbeit zusehen können, und dafür ist "echtes" C++ zu undurchsichtig. Da läuft für meinen Geschmack zuviel automatisch hinter den Kulissen ab, was ich als Programmierer nicht mehr im einzelnen mitbekomme und auch nicht beeinflussen kann.

                Na dann sind Assembler und C ja genau das richtige für dich.

                Gruss,
                OhneName

                1. Hallo,

                  Außerdem hast du vergessen, den Mäher abzustellen. Das kann beim Putzen gefährlich sein! ;-)
                  Oh, das kommt davon wenn man eine Schritt für Schritt-Anleitung umsetzt ohne sich dabei selbst Gedanken zu machen *peinlich*. Aber ich hab ja den Inhalt der Klasse Rasenmäher nicht näher gezeigt. Die Methode putzen(Rasenmäher mäher) prüft nämlich zuerst ob der Rasenmäher an ist und wirft in diesem Fall eine DangerToLifeException.

                  schlau! Da hast du dich ja nochmal geschickt aus der Affäre gezogen. ;-)

                  dein Pseudocode ist aber auch nicht gerade ein typisches Beispiel für Objektorientierung - ich wüsste auch nicht, wie man das besser verdeutlichen könnte.
                  Was wäre in deinen Augen denn ein typisches Beispiel für Objektorientierung?

                  Es sollte ein Beispiel sein, bei dem deutlich wird, dass eine Klasse
                   * unterschiedliche Ausprägungen haben kann
                   * die Methoden zur Bearbeitung selbst mitbringt
                   * ihre innere Realisierung nicht unbedingt nach außen zeigen muss

                  Ich habe die Garage, den Rasenmäher und das Grundstück als Klassen modelliert.

                  Ja. Da das Beispiel von jeder Klasse nur eine Instanz (ein Objekt) verwendet, werden einige Vorzügen jedoch gar nicht deutlich. Aber wenn man nach guten Beispielen sucht, landet man komischerweise oft bei Autos.

                  Modellieren wir doch einfach mal ein Kraftfahrzeug als Klasse. Diese abstrakte Basisklasse bringt Eigenschaften wie Leergewicht, Abmessungen, Nutzlast, Zahl der Sitzplätze, der Räder usw. als konstante Eigenschaften mit, die tatsächliche Zahl der Insassen, die Zuladung, die aktuelle Geschwindigkeit usw. als veränderliche Eigenschaften; außerdem Methoden wie aufschließen(), zuschließen(), starten(), beschleunigen(), bremsen(), lenken() und betanken(). Sie enthält außerdem als Eigenschaft ein Objekt der Klasse Motor (wiederum mit eigenen Eigenschaften und Methoden).
                  Davon lassen sich nun die Klassen PKW, LKW, Motorrad, Omnibus ableiten, die den Eigenschaften konkrete Werte geben und die Methoden sinnvoll implementieren. Dennoch kann man von jedem Objekt der Klassen PKW oder LKW das Leergewicht oder die Höhe abfragen, oder die Methode bremsen() aufrufen, ohne zu wissen, wie sie genau realisiert ist. Das entspricht der Sichtweise eines durchschnittlichen Autofahrers, der weiß, wie er sein Fahrzeug handhaben muss, aber er braucht nicht zu wissen, ob der Motor vier oder acht Zylinder hat, oder wie die Bremskreise aufgeteilt sind.

                  Findest du? Ich nicht. Wenn ich in der Küche anfange zu kochen oder zu backen, suche ich mir ja auch erst alle Utensilien und Zutaten zusammen, bevor ich überhaupt anfange - und nicht "just in time" wenn ich sie brauche.
                  Angenommen ich koche ein 6-Gänge-Menü in einer 8qm-Küche mit wenig Ablagefläche, ...

                  Dann muss ich modularisieren: Dann bereite ich den Aperitif, den Salat, die Suppe, den Hauptgang, das Dessert und den Kaffee separat (in einzelnen Modulen) vor, die ich geeignet koordinieren muss. Für jedes einzelne Modul gilt aber wieder das vorher Gesagte: Erst sicherstellen, dass auch alles da ist, was ich brauche. Denn es ist blöd, wenn man schon die Steaks in der Pfanne hat und dann erst feststellt, dass der Käse, den man zum Überbacken nehmen wollte, nicht mehr reicht.

                  Nein, ich würde wirklich die Sachen erst dann aus der Schublade bzw. aus dem Kühlschrank holen wenn ich sie brauche.

                  Dann haben wir grundsätzlich unterschiedliche Arbeitsweisen. Ist ja nicht schlimm.

                  Das tolle an C++ ist, dass es dir erlaubt die volle Kontrolle zu behalten. Wenn du die Abstraktionsmechanismen nicht nutzen willst, dann musst du das ja nicht tun.

                  Das ist natürlich richtig - aber dann haben wir ja wieder genau das, was du vorhin als suboptimal dargestellt hast: Man gibt vor, C++ zu programmieren, und nutzt es wie C.
                  Wobei ich es durchaus zu schätzen weiß, dass ein C++-Compiler in der Regel auch dann einige Syntax-Features von C++ unterstützt, wenn er per Compiler-Option im C-Modus betrieben wird (etwa einzeilige Kommentare oder anonyme unions).

                  Ich empfehle einem Anfänger, der von PHP kommt, ...

                  Ein Anfänger, der von PHP kommt, ist sowieso schon verkorkst. ;-)

                  ich kann da nur für mich sprechen. Und ich will ein System (Werkzeug, Software, Hifi-Anlage, Auto) erstmal bis ins kleinste Detail kennen, bevor ich es wirklich einsetze.
                  Das will ich auch. Aber ich nehme auch die Abstraktionsmöglichkeiten, die mir eine Programmiersprache bietet, dankbar an.

                  Naja, ich nur mit großer Skepsis, oft Widerwillen.

                  Ich will noch jedem Bit bei der Arbeit zusehen können, und dafür ist "echtes" C++ zu undurchsichtig. Da läuft für meinen Geschmack zuviel automatisch hinter den Kulissen ab, was ich als Programmierer nicht mehr im einzelnen mitbekomme und auch nicht beeinflussen kann.
                  Na dann sind Assembler und C ja genau das richtige für dich.

                  Diese beiden zusammen sind auch in der Tat mein liebstes Gespann. Dabei variiert der Assembler-Anteil je nach Projekt zwischen nahezu 0 und über 50%.

                  Ciao,
                   Martin

                  --
                  Die späteren Ehen sind oft glücklicher als die erste, weil das natürliche Ende bereits absehbar ist.
                    (George Bernhard Shaw)
                  1. Hallo,

                    Modellieren wir doch einfach mal ein Kraftfahrzeug als Klasse...

                    Das finde ich ein ziemlich gutes Beispiel. Es beinhaltet auch die wesentlichen Merkmale der Objektorientierung Kapselung, Vererbung, Polymorphie, Abstraktion.

                    Aber du hattest ja gemeint, dass die prozedurale Denkweise mehr der natürlichen Denkweise des Menschen entspricht. Wie würde man also "prozedural" ein Auto programmieren?

                    Dann muss ich modularisieren: Dann bereite ich den Aperitif, den Salat, die Suppe, den Hauptgang, das Dessert und den Kaffee separat (in einzelnen Modulen) vor, die ich geeignet koordinieren muss. Für jedes einzelne Modul gilt aber wieder das vorher Gesagte: Erst sicherstellen, dass auch alles da ist, was ich brauche. Denn es ist blöd, wenn man schon die Steaks in der Pfanne hat und dann erst feststellt, dass der Käse, den man zum Überbacken nehmen wollte, nicht mehr reicht.

                    Diese Antwort hatte ich bereits erwartet, als ich meine letzte Antwort schrieb. Programmiertechnisch gesehen, bedeutet das du teilst deine große Funktion in mehrere kleinere Funktionen auf, damit du den Überblick behälst. Ist das aber nicht das gleiche wie wenn du versuchst den Sichtbarkeitsbereich deiner lokalen Variablen zu verkleinern?

                    Ich habe mir außerdem überlegt, dass die Zutaten in einem Programm eigentlich eher den Funktionsparametern entsprechen und weniger lokalen Variablen. Z.B. eine Funktion salatZubereiten(Salat s, Essig e, Öl ö). Dann wäre natürlich der erste Schritt die Parameter auf Gültigkeit zu überprüfen, d.h. s.getGewicht() > 500g, e.getMenge() > 50ml, ö.getMenge() > 50ml. Ich würde als nächstes eine lokale Variable Spüle anlegen und den Salat in der Spüle waschen. Die Variable Salatschüssel würde ich erst dann anlegen, wenn ich sie brauche um den Salat reinzutun. Der Fall dass das Anlegen der Salatschüssel mit einer ThereIsNoSchüsselInYourKitchenException fehlschlägt wäre glaube ich ein ernster Programmierfehler. Schließlich sollte ich keine Funktion salatZubereiten schreiben wenn ich keine Salatschüssel hab.

                    Dann haben wir grundsätzlich unterschiedliche Arbeitsweisen. Ist ja nicht schlimm.

                    Wäre ja auch schlimm, wenn alle Menschen gleich arbeiten würden.

                    Das ist natürlich richtig - aber dann haben wir ja wieder genau das, was du vorhin als suboptimal dargestellt hast: Man gibt vor, C++ zu programmieren, und nutzt es wie C.

                    Hmm, es ist ja auch nicht verboten in C++ C-artig zu programmieren und es gibt sicher auch genug Einsatzbereiche wo es auch sinnvoll ist das zu tun (Mikrocontroller, performancekritische Abschnitte). C++ ist eben eine Multiparadigmensprache und jeder Sprachteil hat seine völlig legitime Daseinsberechtigung. Trotzdem sollte man gerade als Anfänger lieber cout, cin, ifstream, string, vector usw. nutzen anstatt mit fopen und malloc herumzuhantieren und dabei Gefahr zu laufen fclose und free zu vergessen.

                    C++ ist eben eine sehr komplexe Sprache und sie macht es leider einem Anfänger sehr schwer sich in diesem Dschungel zurechtzufinden.

                    Wobei ich es durchaus zu schätzen weiß, dass ein C++-Compiler in der Regel auch dann einige Syntax-Features von C++ unterstützt, wenn er per Compiler-Option im C-Modus betrieben wird (etwa einzeilige Kommentare oder anonyme unions).

                    Sind das nicht sowieso Eigenschaften, die es seit C99 auch in C gibt?

                    Ich empfehle einem Anfänger, der von PHP kommt, ...

                    Ein Anfänger, der von PHP kommt, ist sowieso schon verkorkst. ;-)

                    Ich bin überzeugt, dass man da noch was retten kann. Mein Weg hat nämlich auch über PHP geführt und ich denke ich habe den Absprung noch rechtzeitig geschafft ;-)

                    Diese beiden zusammen sind auch in der Tat mein liebstes Gespann. Dabei variiert der Assembler-Anteil je nach Projekt zwischen nahezu 0 und über 50%.

                    Dürft ich fragen wie groß deine Projekte dann im Normalfall sind? Ich denke große Projekte in Assembler umzusetzen kann man durchaus eine kleine Kunst nennen, da man dafür ja schon eine ganze Menge wissen muss.

                    Gruss,
                    OhneName

                    1. n'Abend!

                      Modellieren wir doch einfach mal ein Kraftfahrzeug als Klasse...
                      Das finde ich ein ziemlich gutes Beispiel. Es beinhaltet auch die wesentlichen Merkmale der Objektorientierung Kapselung, Vererbung, Polymorphie, Abstraktion.

                      Stimmt, das ist mir aber auch hinterher erst bewusst geworden.

                      Aber du hattest ja gemeint, dass die prozedurale Denkweise mehr der natürlichen Denkweise des Menschen entspricht. Wie würde man also "prozedural" ein Auto programmieren?

                      Gar nicht - man würde die Sache ganz anders angehen. Beim prozeduralen Ansatz stünde der Vorgang im Vordergrund, also das Fahren. Man würde also eher eine Funktion schreiben

                      int drive(VEHICLE vehicle, LOCATION from, LOCATION to, PAYLOAD *payload);

                      Diese Funktion müsste dann bei jedem Schritt Eigenschaften der Struktur VEHICLE abfragen und auf alle möglichen Werte sinnvoll reagieren.

                      Dann muss ich modularisieren: ...
                      Diese Antwort hatte ich bereits erwartet, als ich meine letzte Antwort schrieb. Programmiertechnisch gesehen, bedeutet das du teilst deine große Funktion in mehrere kleinere Funktionen auf, damit du den Überblick behälst. Ist das aber nicht das gleiche wie wenn du versuchst den Sichtbarkeitsbereich deiner lokalen Variablen zu verkleinern?

                      Nicht ganz. Ich habe ja nicht kritisiert, scope-lokale Variablen zu verwenden. Beispiel:

                      for (i=0; i<SIZE; i++)
                         { int square;
                           square = i*i;

                      float root;
                           root = sqrt(i);
                         }

                      Mal abgesehen davon, dass diese Funktion nichts Sinnvolles tut, weil sie ihre Berechnungen nirgends ausgibt oder speichert: Ich meinte mit Unordnung nur die Deklaration neuer Variablen mitten im Anweisungsblock (hier: float root). Am Blockanfang (int square) ist das völlig okay und selbst im uralten K&R-C schon gültig. Und sinnvoll, denn jeder Block sollte eigentlich einen in sich abgeschlossenen logischen Schritt darstellen.

                      Die Variable Salatschüssel würde ich erst dann anlegen, wenn ich sie brauche um den Salat reinzutun. Der Fall dass das Anlegen der Salatschüssel mit einer ThereIsNoSchüsselInYourKitchenException fehlschlägt wäre glaube ich ein ernster Programmierfehler. Schließlich sollte ich keine Funktion salatZubereiten schreiben wenn ich keine Salatschüssel hab.

                      Ja, aber was ist, wenn du schon Essig und Öl angemixt hast, und dann schmeißt deine Salat-Methode plötzlich eine OutOfPepperException?

                      Wobei ich es durchaus zu schätzen weiß, dass ein C++-Compiler in der Regel auch dann einige Syntax-Features von C++ unterstützt, wenn er per Compiler-Option im C-Modus betrieben wird (etwa einzeilige Kommentare oder anonyme unions).
                      Sind das nicht sowieso Eigenschaften, die es seit C99 auch in C gibt?

                      Dein Freund David Tribble erwähnt anonymous unions als "an incompatible C++ feature" (was ich aus der Praxis nur teilweise bestätigen kann), aber Kommentare mit // sind seiner Aussage nach auch in C99 okay (das hatte ich beim ersten Überfliegen anders verstanden).

                      Diese beiden zusammen sind auch in der Tat mein liebstes Gespann. Dabei variiert der Assembler-Anteil je nach Projekt zwischen nahezu 0 und über 50%.
                      Dürft ich fragen wie groß deine Projekte dann im Normalfall sind?

                      Wenn der Assembler-Anteil sehr hoch ist, handelt es sich meist entweder um µC-Anwendungen (da auch manchmal über 80%) oder hardwarenahe, kleine Tools mit wenigen tausend Zeilen.
                      Die genaue Anzahl der Programmzeilen ist immer schwer anzugeben, weil der Compiler ja auch die -zigtausend Zeilen der includierten Headerdateien mitzählt, und allein die windows.h und ihre Tributaries machen ja schon an die 100'000 Zeilen aus.

                      Ich denke große Projekte in Assembler umzusetzen kann man durchaus eine kleine Kunst nennen, da man dafür ja schon eine ganze Menge wissen muss.

                      Die Größe des Projekts steht in keinem Zusammenhang mit dem nötigen Wissen. Es ist einfach eine Frage der Fleißarbeit. Wie du schon sagst, ist Assembler eigentlich nur in extrem zeitkritischen Bereichen sinnvoll, oder bei sehr hardwarenahen Projekten (z.B. Treiber für spezielle Hardware). Größere Codebereiche in Assembler zu coden, würde mir zwar Spaß machen, aber der Zeitaufwand geht ins Uferlose.

                      Ciao,
                       Martin

                      --
                      Eine Neandertaler-Sippe sitzt in ihrer kalten Höhle. Seufzt der Stammesälteste: "Hoffentlich erfindet bald jemand das Feuer!"
                      1. Hallo,

                        int drive(VEHICLE vehicle, LOCATION from, LOCATION to, PAYLOAD *payload);

                        An sowas hatte ich auch gedacht, aber ich erkenne auch hier wieder die Grundzüge des objektorientierten Denkens. Sind denn VEHICLE, LOCATION und PAYLOAD praktisch etwas anderes als Klassen?

                        Der Unterschied zu
                        vehicle.drive(from, to, &payload);
                        ist ja eigentlich nicht sonderlich groß.

                        for (i=0; i<SIZE; i++)
                           { int square;
                             square = i*i;

                        float root;
                             root = sqrt(i);
                           }

                        Ich würde die Schleife anders schreiben:
                        for(int i = 0; i < SIZE; i++)
                        {
                            int square = i * i;
                            // Mach was mit square
                            float root = sqrt(i);
                            // Mach was mit root
                        }

                        Ja, aber was ist, wenn du schon Essig und Öl angemixt hast, und dann schmeißt deine Salat-Methode plötzlich eine OutOfPepperException?

                        Du bist echt hartnäckig. Es wäre zu überlegen ob der Pfeffer dann nicht auch ein Parameter sein sollte, der am Anfang geprüft werden muss.

                        Scott Meyers argumentiert in Effektiv C++ programmieren damit dass die Objekterstellung teuer sein könnte und es gut möglich ist, dass zwischen Deklaration am Methodenanfang und Verwendung die Methode abbricht (z.B. wegen einer Exception) und das Objekt damit umsonst erzeugt worden wäre.

                        Joshua Bloch nennt in Effective Java als Grund, dass die Variable am Methodenanfang den Leser des Codes nur ablenkt und er eventuell an der Stelle wo sie benutzt wird den Typ der Variable schon wieder vergessen haben könnte. Außerdem nennt er eine bessere Wartbarkeit und eine reduzierte Fehleranfälligkeit.

                        Kann man in C99 mittlerweile Variablen an beliebigen Stellen deklarieren?

                        Dein Freund David Tribble erwähnt anonymous unions als "an incompatible C++ feature" (was ich aus der Praxis nur teilweise bestätigen kann), aber Kommentare mit // sind seiner Aussage nach auch in C99 okay (das hatte ich beim ersten Überfliegen anders verstanden).

                        Ich muss gestehen unions noch nie verwendet zu haben.

                        Gruss,
                        OhneName

                        1. Hi,

                          int drive(VEHICLE vehicle, LOCATION from, LOCATION to, PAYLOAD *payload);
                          An sowas hatte ich auch gedacht, aber ich erkenne auch hier wieder die Grundzüge des objektorientierten Denkens. Sind denn VEHICLE, LOCATION und PAYLOAD praktisch etwas anderes als Klassen?

                          das ist genau das, was ich auch immer predige: "Objektorientierung findet im Kopf des Programmierers statt. Selbst in Assembler kann man objektorientiert programmieren."
                          Ja, wenn ich in einer C-Struktur Eigenschaften von "Objekten" festhalte, ist das sicher schon ein Schritt in Richtung Objektorientierung.

                          Der Unterschied zu
                          vehicle.drive(from, to, &payload);
                          ist ja eigentlich nicht sonderlich groß.

                          Eben.

                          Ja, aber was ist, wenn du schon Essig und Öl angemixt hast, und dann schmeißt deine Salat-Methode plötzlich eine OutOfPepperException?
                          Du bist echt hartnäckig.

                          Danke, gern geschehen. :-)

                          Es wäre zu überlegen ob der Pfeffer dann nicht auch ein Parameter sein sollte, der am Anfang geprüft werden muss.

                          Ich sag's doch: Ich stelle zu Anfang eines Arbeitsschrittes sicher, dass ich auch das nötige Material und Werkzeug habe.

                          Scott Meyers argumentiert in Effektiv C++ programmieren damit dass die Objekterstellung teuer sein könnte und es gut möglich ist, dass zwischen Deklaration am Methodenanfang und Verwendung die Methode abbricht (z.B. wegen einer Exception) und das Objekt damit umsonst erzeugt worden wäre.

                          Das ist ein Punkt. Die dynamische Erstellung und Initialisierung von Objekten kann tatsächlich aufwendig sein. Das sehe ich als Parallele zur dynamischen Speicherreservierung mit malloc() bei der klassischen C-Programmierung. Da zögere ich den Aufruf von malloc() auch so weit wie möglich hinaus, weil ich im Fehlerfall wieder den Aufwand habe, den angeforderten Speicher auch wieder freizugeben.

                          Joshua Bloch nennt in Effective Java als Grund, dass die Variable am Methodenanfang den Leser des Codes nur ablenkt und er eventuell an der Stelle wo sie benutzt wird den Typ der Variable schon wieder vergessen haben könnte. Außerdem nennt er eine bessere Wartbarkeit und eine reduzierte Fehleranfälligkeit.

                          Das halte ich für Mumpitz, ich sehe es genau umgekehrt. Ich möchte ganz am Anfang eines logischen Blocks (Funktion/Methode) wissen, was ich alles brauche, und im Falle einer Überarbeitung nicht den ganzen Block nach weiteren Deklarationen durchsuchen müssen.

                          Kann man in C99 mittlerweile Variablen an beliebigen Stellen deklarieren?

                          AFAIK: Offiziell nein; die Compiler, die alternativ C++ können, akzeptieren es aber wohl trotzdem.

                          Ich muss gestehen unions noch nie verwendet zu haben.

                          Ich benutze sie auch nicht regelmäßig, aber mir würde doch etwas fehlen, wenn sie plötzlich wegfallen würden.

                          Ciao,
                           Martin

                          --
                          Noch Fragen? - Ich weiß es auch nicht.
                          1. Hallo,

                            das ist genau das, was ich auch immer predige: "Objektorientierung findet im Kopf des Programmierers statt. Selbst in Assembler kann man objektorientiert programmieren."

                            Sehe ich genauso. Und wie gesagt, man kann auch in Java prozedural programmieren.

                            Es wäre zu überlegen ob der Pfeffer dann nicht auch ein Parameter sein sollte, der am Anfang geprüft werden muss.

                            Ich sag's doch: Ich stelle zu Anfang eines Arbeitsschrittes sicher, dass ich auch das nötige Material und Werkzeug habe.

                            Natürlich muss man gewisse Vorbedingungen prüfen. Aber das heißt doch nicht, dass man alle Variablen gleich am Anfang deklarieren muss. Nur weil ich in einer Schleife i verwende schreib ich doch nicht an den Anfang int i. Welchen Nutzen sollte das haben? Im Gegenteil, wenn ich die Schleife irgendwann wieder entferne, dann vergess ich vielleicht das int i zu entfernen und hab damit eine unnütze Anweisung im Programm stehen.

                            Joshua Bloch nennt in Effective Java als Grund, dass die Variable am Methodenanfang den Leser des Codes nur ablenkt und er eventuell an der Stelle wo sie benutzt wird den Typ der Variable schon wieder vergessen haben könnte. Außerdem nennt er eine bessere Wartbarkeit und eine reduzierte Fehleranfälligkeit.

                            Das halte ich für Mumpitz, ich sehe es genau umgekehrt. Ich möchte ganz am Anfang eines logischen Blocks (Funktion/Methode) wissen, was ich alles brauche, und im Falle einer Überarbeitung nicht den ganzen Block nach weiteren Deklarationen durchsuchen müssen.

                            Ich glaube mittlerweile dass es sich dabei einfach um eine Gewohnheitssache handelt. Wenn ich eine fremde Funktion anschaue, dann sollte mir im Idealfall der Funktionsname bereits grob sagen was die Funktion macht. Eine genau Erläuterung der Funktionsweise erhalte ich aus dem Javadoc/Doxygen-Kommentar über der Funktion. Welche Variablen in der Funktion verwendet werden kann mir doch erstmal egal sein, mir reicht es völlig wenn eine Variable bei der ersten Benutzung deklariert wird. In diesem Fall kann sie auch direkt mit einem sinnvollen Wert initialisert werden und muss nicht am Anfang nutzloserweise mit 0 oder null belegt werden.

                            Wie stellst du beim Überarbeiten einer Funktion sicher, dass alle Variablen die du am Anfang deklariert hast auch wirklich noch verwendet werden?
                            Wenn ich die Zeile mit der Initialisierung entferne, dann entferne ich automatisch auch die Variablendeklaration.

                            Gruss,
                            OhneName

                            1. n'Abend!

                              Natürlich muss man gewisse Vorbedingungen prüfen. Aber das heißt doch nicht, dass man alle Variablen gleich am Anfang deklarieren muss.

                              selbst wenn ich es nicht muss, würde ich es trotzdem tun - und befürworten.

                              Nur weil ich in einer Schleife i verwende schreib ich doch nicht an den Anfang int i.

                              Ich schon.

                              Welchen Nutzen sollte das haben? Im Gegenteil, wenn ich die Schleife irgendwann wieder entferne, dann vergess ich vielleicht das int i zu entfernen und hab damit eine unnütze Anweisung im Programm stehen.

                              Es ist ja keine Anweisung. Nur zwei (16bit) bzw. vier (32bit) Bytes auf dem Stack, die reserviert, aber nicht verwendet (und auch nicht initialisiert) werden. Das ist überflüssig, aber es tut nicht weh.

                              Ich möchte ganz am Anfang eines logischen Blocks (Funktion/Methode) wissen, was ich alles brauche, und im Falle einer Überarbeitung nicht den ganzen Block nach weiteren Deklarationen durchsuchen müssen.
                              Ich glaube mittlerweile dass es sich dabei einfach um eine Gewohnheitssache handelt.

                              Ja, sicher ist es das.

                              Wenn ich eine fremde Funktion anschaue, dann sollte mir im Idealfall der Funktionsname bereits grob sagen was die Funktion macht.

                              Wir sollten unterscheiden, ob ich eine fremde Funktion einfach nur benutze (dann ist es mir wirklich egal, solange Argumente und Ergebnis gut dokumentiert sind), oder ob ich eine Funktion neu schreibe oder überarbeite.

                              Eine genau Erläuterung der Funktionsweise erhalte ich aus dem Javadoc/Doxygen-Kommentar über der Funktion.

                              Was auch immer das sein mag.

                              Wie stellst du beim Überarbeiten einer Funktion sicher, dass alle Variablen die du am Anfang deklariert hast auch wirklich noch verwendet werden?

                              Ich kann es nicht sicherstellen. Ich merke es, wenn mein Compiler eine Warning ausgibt: Variable 'i' is declared, but never used.

                              Ciao,
                               Martin

                              --
                              Besteht ein Personalrat aus nur einer Person, erübrigt sich die Trennung nach Geschlechtern.
                                (aus einer Info des deutschen Lehrerverbands Hessen)
                              1. Hallo!

                                Ich finde das Thema sehr interessant!

                                Ich halte es allerdings auch so, dass Variablen dort deklariert werden wo sie gebraucht werden. Ich halte das für sehr übersichtlich. (Geschmackssache?)

                                Manche Variablen dienen sowieso nur als temporäre Zwischenspeicher.
                                Die Initialisierung "on top" könnte da verwirren oder schafft zumindest Unübersichtlichkeit.

                                Zudem gibt mir der Effekt: Varible+Nutzen einen deutlicheren Eindruck von ebend jenem "Nutzen".

                                Vielleicht ist das aber wirklich nur unwesentliche Grundsatzdiskussion alá "Ist das Glas halb voll oder halb leer?".*

                                Carsten

                                *wobei doch jeder weiß, dass es einzig auf die Aktion vor dem aktuellen Zustand ankommt ob es "gefüllt" oder "geleert" wird.

                                1. Hallo Carsten,

                                  Vielleicht ist das aber wirklich nur unwesentliche Grundsatzdiskussion alá "Ist das Glas halb voll oder halb leer?".*
                                  *wobei doch jeder weiß, dass es einzig auf die Aktion vor dem aktuellen Zustand ankommt ob es "gefüllt" oder "geleert" wird.

                                  oh nein, keineswegs! Die Richtung der Veränderung drückt man doch durch ein zusätzliches adverbiales Glied aus:
                                   * Das Glas ist NOCH halb voll
                                  oder
                                   * Das Glas ist SCHON halb voll

                                  *scnr*
                                   Martin

                                  --
                                  Ich stehe eigentlich gern früh auf.
                                  Außer morgens.
                                  1. Hey Martin!

                                    oh nein, keineswegs! Die Richtung der Veränderung drückt man doch durch ein zusätzliches adverbiales Glied aus:
                                    * Das Glas ist NOCH halb voll
                                    oder
                                    * Das Glas ist SCHON halb voll

                                    Nein ;)
                                    "Das Glas ist NOCH halb voll" bezeichnet den Zustand vor dem aktuellen.
                                    Es beschreibt nämlich, dass das Glas VORHER _mehr_ Inhalt hatte.
                                    Was aber, wenn das Glas nur bis zur Hälfte gefüllt wurde? Dann gibt es kein "schon" und auch kein "noch".
                                    Nur den Ausgangspunkt, dass das Glas entweder a) weiter befüllt werden soll, oder b) halt nicht.
                                    Man kann also die Aussagen treffen, dass a) halb leer und b) halb voll ist ;P

                                    hehe

                                    Carsten

  4. Hallo Leute!

    Ich wollte nur nochmal ebend meinen aktuellen Stand mitteilen.
    Ich habe mir das von Vinzenz empfohlene Visual C++ Express 2008 installiert und war davon absolut erschlagen.
    Ich habe mir ein neues Projekt erstellt und *schwups* hatte ich auch gleich eine Menge Dateien mit Inhalt den ich nicht verstanden habe.
    Da finde ich CodeBlocks doch wesentlich angenehmer wo ich mit einem "leeren Blatt" anfangen kann.

    Ich will C++ ja lernen und nicht, durch z.B. Visual C++, bevormundet werden, indem es mir ungefragt "fertige Schnipsel" vorsetzt. Das erinnert mich doch stark an WYSIWYG und sowas mag ich höchstens als Hilfsmittel (für HTML-Elemente z.B. im Dreamweaver), aber nicht als Arbeitsweise.

    Soweit zu den Vorbereitungen :)
    Dann habe ich mich erneut auf die Suche nach ausführlichen und verständlichen Tutorials begeben und folgende 2 Seite gebookmarkt[tm]: auf englisch und auf deutsch.
    Ich lese grad beide.
    Bei der englischen Dokumentation mit einem zusätzlichen Browser-Tab in dem ich den Traffic des Leo-Dictionary strapaziere ;)

    Tatsächlich kenn ich die ersten Kapitel schon von PHP und hab nicht viel neues gelernt. Wegen der Unterschiede im Detail les ich sie aber trotzdem fleissig.
    Besonders ungewohnt ist mir am Anfang schon die fehlende automatische Typumwandlung von PHP. Demnach ist es wohl in C++ nicht möglich gemischte Arrays zu erstellen. (für mich bis jetzt noch nicht)

    Viel Umstellung war bis jetzt jedenfalls noch nicht. Ich weiß, das kommt noch.

    Bis zu einem gewissen Punkt habe ich die Diskussion von Martin und OhneName verfolgt.
    Nun, warum will ich C++? Nach PHP wollte ich eine Sprache mit der ich auch anspruchsvolle Anwendungen schreiben kann. PHP ist, meiner Meinung nach, selbst als "Websprache" sehr begrenzt was die Interaktion mit Benutzern angeht. Was unter anderem an dem HTTP-Layer liegt.

    Ich habe kurz überlegt mich intensiver mit Perl zu beschäftigen aber auch da komm ich wohl nicht über Netzwerk-Angelegenheiten hinaus. Vieles davon lässt sich auch mit reinem PHP umsetzen. Das reicht mir aber nicht mehr.

    Ich möchte dahingehend arbeiten, dass ich in der Lage bin, mir nützliche Programme für Windows selbst schreiben zu können um mir Aufgaben bei meinen anderen (Programmier-)Arbeiten erleichtern zu können.
    Ein nächster Punkt wäre, dass mir C++ ausreichend komplex erscheint um mich endlich mal "tiefer" mit der Materie des Programmierens zu beschäftigen als es mit z.B. PHP möglich ist.
    Dazu gehört z.B. auch, dass mich das ganze Thema der Speicherverwaltung interessiert. Auch der Umgang mit Zeigern, objekt-orientiertes Programmieren usw.

    Witzig find ich, dass ich das alt-bekannte goto in C++ wiedergefunden habe.
    Ich dachte das wäre ein einmaliges Basic-Konstrukt gewesen, auch wenn es wohl in PHP6 eingeführt werden soll (warum auch immer).

    Danke für eure zahlreichen Kommentare, Links und anregenden Disskussionen!

    I Carsten

    1. Hallo,

      Ich habe mir das von Vinzenz empfohlene Visual C++ Express 2008 installiert und war davon absolut erschlagen.

      ;-)

      Da finde ich CodeBlocks doch wesentlich angenehmer wo ich mit einem "leeren Blatt" anfangen kann.
      Ich will C++ ja lernen und nicht, durch z.B. Visual C++, bevormundet werden, indem es mir ungefragt "fertige Schnipsel" vorsetzt. Das erinnert mich doch stark an WYSIWYG und sowas mag ich höchstens als Hilfsmittel (für HTML-Elemente z.B. im Dreamweaver), aber nicht als Arbeitsweise.

      Exakt meine Meinung. Aber es gibt genügend Leute, die das toll finden, wenn die IDE ihnen viel Arbeit abnimmt. Solange man mit dem Arbeitsstil, den das System "vorgibt", auch zurechtkommt, ist das ja auch in Ordnung.

      Bei der englischen Dokumentation mit einem zusätzlichen Browser-Tab in dem ich den Traffic des Leo-Dictionary strapaziere ;)

      Tipp: Ich bevorzuge http://www.dict.cc/ anstatt LEO. Es bietet neben Englisch noch einige andere Sprachen, darunter sogar so ausgefallene wie Esperanto. Und zumindest im Englischen habe ich subjektiv den Eindruck, dass die Qualität der Übersetzungen sowie die zusätzlichen Angaben (Kontext) besser sind.
      Im übrigen hat Herr Riethmayer, der Verantwortliche für LEO, mir vor einiger Zeit zwischen den Zeilen sehr deutlich zu verstehen gegeben: "Wir sind nicht an einer Verbesserung unseres Angebots interessiert, danke, das kostet uns so schon genug."

      Tatsächlich kenn ich die ersten Kapitel schon von PHP und hab nicht viel neues gelernt. Wegen der Unterschiede im Detail les ich sie aber trotzdem fleissig.

      Ja, das ist wichtig, weil teils wichtige Unterschiede in feinen Details liegen.

      Besonders ungewohnt ist mir am Anfang schon die fehlende automatische Typumwandlung von PHP. Demnach ist es wohl in C++ nicht möglich gemischte Arrays zu erstellen. (für mich bis jetzt noch nicht)

      Nein. C und C++ unterscheiden da sorgfältig: Arrays haben immer Elemente desselben Typs; wenn man Elemente verschiedenen Typs organisieren will, kommt man zu structs (C) oder Klassen (C++).

      Bis zu einem gewissen Punkt habe ich die Diskussion von Martin und OhneName verfolgt.

      ... die von deiner ursprünglichen Frage ja auch ziemlich weit abgedriftet ist. ;-)

      Nun, warum will ich C++? Nach PHP wollte ich eine Sprache mit der ich auch anspruchsvolle Anwendungen schreiben kann. PHP ist, meiner Meinung nach, selbst als "Websprache" sehr begrenzt was die Interaktion mit Benutzern angeht. Was unter anderem an dem HTTP-Layer liegt.

      Nein, sondern an der Client/Server-Architektur. Man kann mit PHP auch Scripte schreiben, die wie normale Programme lokal auf dem Rechner laufen. Ganz ohne HTTP und Webserver. Das ist aber doch eher untypisch.

      Ich möchte dahingehend arbeiten, dass ich in der Lage bin, mir nützliche Programme für Windows selbst schreiben zu können um mir Aufgaben bei meinen anderen (Programmier-)Arbeiten erleichtern zu können.

      Mit der Motivation habe ich auch angefangen.

      Witzig find ich, dass ich das alt-bekannte goto in C++ wiedergefunden habe.

      Ja, ein alter Zopf, den immer noch niemand abgeschnitten hat ...

      Ich dachte das wäre ein einmaliges Basic-Konstrukt gewesen

      Nein, das gibt's auch in einigen anderen Sprachen. Aber überall hat "goto" einen ranzigen Beigeschmack, und es heißt "Das macht man aber nicht".

      So long,
       Martin

      --
      Besteht ein Personalrat aus nur einer Person, erübrigt sich die Trennung nach Geschlechtern.
        (aus einer Info des deutschen Lehrerverbands Hessen)
      1. Hallo Martin!

        Tipp: Ich bevorzuge http://www.dict.cc/ anstatt LEO. Es bietet neben Englisch noch einige andere Sprachen, darunter sogar so ausgefallene wie Esperanto. Und zumindest im Englischen habe ich subjektiv den Eindruck, dass die Qualität der Übersetzungen sowie die zusätzlichen Angaben (Kontext) besser sind.

        Mh, auch nach ausgiebigem Klicken (was ich hier nur ausnahmsweise auf mich genommen habe) konnte ich keine Tschechisch-Deutsch Übersetzung einstellen. Auch nicht Tschechisch-Englisch.
        Das ist immer mein erster Test um einen alten Liebesbrief aus der Schulzeit übersetzen zu können ;)
        Demnach reicht mir dann LEO als Browser-Plugin auch wenn der Herr dahinter "ein Arsch" sein mag.

        Nein. C und C++ unterscheiden da sorgfältig: Arrays haben immer Elemente desselben Typs; wenn man Elemente verschiedenen Typs organisieren will, kommt man zu structs (C) oder Klassen (C++).

        Och nee, das wird auch nicht besser? xD
        Ok, ich find schon noch raus wie das mit den Klassen funktioniert.
        Ansonsten wird halt alles als std::string deklariert ;)

        ... die von deiner ursprünglichen Frage ja auch ziemlich weit abgedriftet ist. ;-)

        Das macht nix, Themansprünge bringen manchmal auch neue Ansichten mit sich.

        Man kann mit PHP auch Scripte schreiben, die wie normale Programme lokal auf dem Rechner laufen. Ganz ohne HTTP und Webserver. Das ist aber doch eher untypisch.

        Ohne Server? Wie das? Wer übersetzt den PHP-"Kram"?
        Aber weiter als Konsolenanwendungen dürfte man damit auch nicht kommen.

        Mit der Motivation habe ich auch angefangen.

        Was ist draus geworden? Ich hoffe C++ war dir nicht völlig nutzlos.

        Ja, ein alter Zopf, den immer noch niemand abgeschnitten hat ...
        ... und es heißt "Das macht man aber nicht".

        Warum man manche Dinge nicht einfach sterben lässt...
        Die Worte des MS-Dev-Teams zum "Abgang" des IE6: "Thanks for the good times, IE6." kann man z.B. auch nur mit Mühe _nicht_ ironisch nehmen.

        Thx for support!

        Carsten

        1. Hi Carsten,

          Tipp: Ich bevorzuge http://www.dict.cc/ anstatt LEO.
          Mh, auch nach ausgiebigem Klicken (was ich hier nur ausnahmsweise auf mich genommen habe) konnte ich keine Tschechisch-Deutsch Übersetzung einstellen. Auch nicht Tschechisch-Englisch.

          oha, das ist eine harte Nuss. Tschechisch ist tatsächlich selten zu finden.

          Das ist immer mein erster Test um einen alten Liebesbrief aus der Schulzeit übersetzen zu können ;)

          Ich selbst habe mit Tschechisch keine Ambitionen, aber einer meiner Freunde ist mit einer Tschechin aus Brno verheiratet, so kriege ich doch das eine oder andere mit. Er hat sich zwar am Anfang der Beziehung vorgenommen, auch etwas Tschechisch zu lernen, aber da sie ausgezeichnet Deutsch spricht (wenn auch mit dem typischen harten osteuropäischen Akzent), ist es bei ihm beim guten Vorsatz geblieben.

          Man kann mit PHP auch Scripte schreiben, die wie normale Programme lokal auf dem Rechner laufen. Ganz ohne HTTP und Webserver. Das ist aber doch eher untypisch.
          Ohne Server? Wie das? Wer übersetzt den PHP-"Kram"?

          Der PHP-Interpreter, wer sonst? :-)

          Aber weiter als Konsolenanwendungen dürfte man damit auch nicht kommen.

          Ich habe mich noch nicht so genau damit befasst. Aber prinzipiell kann man auch Fremdbibliotheken mit PHP nutzen (zumindest für Windows gibt es eine Extension, mit der PHP auch Funktionen aus Win32-DLLs aufrufen kann), so dass es theoretisch denkbar wäre, auch mit PHP GUI-Anwendungen zu schreiben.
          Ob das jemand ernsthaft machen möchte, ist eine andere Frage.

          Mit der Motivation habe ich auch angefangen.
          Was ist draus geworden? Ich hoffe C++ war dir nicht völlig nutzlos.

          Du hast den anderen Ast der Diskussion gelesen und kannst meine Einstellung zu C++ damit ungefähr einschätzen.
          Ich habe 1984/85 mit BASIC auf einem C64 angefangen zu programmieren, bin dann mit dem C64 sehr bald ziemlich tief in Assembler eingestiegen. Nach dem Umstieg auf die PC-Architektur habe ich im Studium zunächst Pascal gelernt, später C. Also ich meine stinknormales ANSI-C, von C++ sprach Anfang/Mitte der 90er Jahre noch kaum jemand. Parallel dazu habe ich mich mit x86-Assembler angefreundet und diese Richtung lieben gelernt. Mit C++ habe ich mich nach dem Studium aus persönlichem Interesse befasst - bis zu der Erkenntnis, die ich an anderer Stelle im Thread schon beschrieben habe.
          Nein, die Bekanntschaft mit C++ war sicher nicht nutzlos. Aber für mich persönlich eine Sackgasse. Ich könnte in der Richtung wieder anknüpfen, wenn es sich so ergibt, würde es aber freiwillig nicht tun.

          Ciao,
           Martin

          --
          Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
          1. Hey Martin!

            Ohne Server? Wie das? Wer übersetzt den PHP-"Kram"?
            Der PHP-Interpreter, wer sonst? :-)

            Ich sagte zum Glück, ich bin mit PHP "am weitesten" aber wohl doch nicht sehr weit ;D
            Daher die, wahrscheinlich blöde, Nachfrage, was veranlasst ihn dazu?
            Eine tiefere Implementierung im OS?

            Ob das jemand ernsthaft machen möchte, ist eine andere Frage.

            Vielleicht nur mal so um PHP ein bisschen auszureizen ;)

            Nein, die Bekanntschaft mit C++ war sicher nicht nutzlos. Aber für mich persönlich eine Sackgasse. Ich könnte in der Richtung wieder anknüpfen, wenn es sich so ergibt, würde es aber freiwillig nicht tun.

            Das ist für mich als Quereinsteiger natürlich nicht gerade motivierend.
            Mein Problem, um an die Programmiererei für Windows (oder mit Fenstern allgemein) anknüpfen zu können, sind halt die fehlenden Vorkenntnisse.
            Ich dachte mit C++ kann ich sie mir optimal erwerben.

            Vielleicht sollte ich doch auf etwas anderes umsteigen?
            Ich mein, ich will halt auch nicht meine Zeit verschwenden... du verstehst?!

            Carsten

            1. Hallo,

              Ohne Server? Wie das? Wer übersetzt den PHP-"Kram"?
              Der PHP-Interpreter, wer sonst? :-)
              Ich sagte zum Glück, ich bin mit PHP "am weitesten" aber wohl doch nicht sehr weit ;D
              Daher die, wahrscheinlich blöde, Nachfrage, was veranlasst ihn dazu?
              Eine tiefere Implementierung im OS?

              wenn PHP unter Windows installiert wird, dann werden auf Shell-Ebene automatisch Dateien mit der Endung .php mit der Anwendung php.exe verknüpft. Das heißt, ein Doppelklick auf eine PHP-Datei startet automatisch php.exe mit der angeklickten PHP-Datei als Argument.
              Auf anderen OS-Plattformen dürfte es ähnlich ablaufen.

              Ob das jemand ernsthaft machen möchte, ist eine andere Frage.
              Vielleicht nur mal so um PHP ein bisschen auszureizen ;)

              Okay, das kann ich gelten lassen. ;-)

              Nein, die Bekanntschaft mit C++ war sicher nicht nutzlos. Aber für mich persönlich eine Sackgasse. Ich könnte in der Richtung wieder anknüpfen, wenn es sich so ergibt, würde es aber freiwillig nicht tun.
              Das ist für mich als Quereinsteiger natürlich nicht gerade motivierend.

              Lass dich nicht von meiner persönlichen Meinung demotivieren. Sie resultiert aus einer Einstellung, immer so nah wie möglich an der Hardware zu bleiben und alles unter Kontrolle haben zu wollen, jedes Bit beim Vornamen kennen zu müssen.

              Mein Problem, um an die Programmiererei für Windows (oder mit Fenstern allgemein) anknüpfen zu können, sind halt die fehlenden Vorkenntnisse.
              Ich dachte mit C++ kann ich sie mir optimal erwerben.

              Ja, wenn man bereit ist, ein kleines bisschen zu abstrahieren, mal ansatzweise loszulassen ... ja, dann ist C++ sicher eine gute Wahl.

              Vielleicht sollte ich doch auf etwas anderes umsteigen?
              Ich mein, ich will halt auch nicht meine Zeit verschwenden... du verstehst?!

              Ich verstehe. Da wäre als Alternative noch Java, oder C# als relativ neue Sprache.
              Aber ich behaupte mal: Wenn du C++ lernst, hast du zumindest eine gute Grundlage, mit der du später auch relativ leicht andere Programmiersprachen erlernen kannst. Verschwendet ist die Zeit also auf keinen Fall.

              Ciao,
               Martin

              --
              Wer es in einem Unternehmen zu etwas bringen will, muss so tun, als hätte er es schon zu etwas gebracht.
              1. wenn PHP unter Windows installiert wird, dann werden auf Shell-Ebene automatisch Dateien mit der Endung .php mit der Anwendung php.exe verknüpft. Das heißt, ein Doppelklick auf eine PHP-Datei startet automatisch php.exe mit der angeklickten PHP-Datei als Argument.

                Du meinst wenn ich z.B. XAMPP installiere? Muss ich morgen direkt mal ausprobieren.

                Lass dich nicht von meiner persönlichen Meinung demotivieren. Sie resultiert aus einer Einstellung, immer so nah wie möglich an der Hardware zu bleiben und alles unter Kontrolle haben zu wollen, jedes Bit beim Vornamen kennen zu müssen.

                Nein, gerade _das_ schreckt mich so ab. Meine nächste Frage zu einer Antwort ist halt auch meißt "warum ist das so?".
                Mit der Kontrolle über Vorgänge beim Programmieren verhält es sich da narürlich nicht anders.
                Z.B. Was das Thema mit dem Zeitpunkt der Deklaration der Variablen betrifft.
                Ich möchte halt immer gern sehen (wenns geht euf einen Blick), was da passiert.

                Ich verstehe. Da wäre als Alternative noch Java, oder C# als relativ neue Sprache.

                Java mag ich irgendwie nicht. Keine Ahnung, hab einfach so eine Abneigung. Kann es nicht erklären.
                C# werde ich mir unbedingt mal anschauen.

                Aber ich behaupte mal: Wenn du C++ lernst, hast du zumindest eine gute Grundlage, mit der du später auch relativ leicht andere Programmiersprachen erlernen kannst. Verschwendet ist die Zeit also auf keinen Fall.

                Naja. Ich bin halt auch sehr ungeduldig und mit C++ sind verwertbare Ergebnisse noch lange hin befürchte ich.

                :Off für heut:

                Carsten

                1. n'Abend!

                  wenn PHP unter Windows installiert wird, [...]
                  Du meinst wenn ich z.B. XAMPP installiere?

                  Dieses unselige Kombipaket versuche ich eigentlich immer aus meinen Überlegungen zu verdrängen. Ich gehe eher von einer separaten Installation (Apache, PHP, MySQL; mit Perl hatte ich noch nichts) aus.

                  Lass dich nicht von meiner persönlichen Meinung demotivieren. Sie resultiert aus einer Einstellung, immer so nah wie möglich an der Hardware zu bleiben und alles unter Kontrolle haben zu wollen, jedes Bit beim Vornamen kennen zu müssen.
                  Nein, gerade _das_ schreckt mich so ab. Meine nächste Frage zu einer Antwort ist halt auch meißt "warum ist das so?".
                  Mit der Kontrolle über Vorgänge beim Programmieren verhält es sich da narürlich nicht anders.

                  Na dann "willkommen im Club".

                  Ich verstehe. Da wäre als Alternative noch Java, oder C# als relativ neue Sprache.
                  Java mag ich irgendwie nicht. Keine Ahnung, hab einfach so eine Abneigung. Kann es nicht erklären.

                  Ich kenn's nicht gut genug, um mir ein echtes Urteil erlauben zu können.

                  C# werde ich mir unbedingt mal anschauen.

                  Kenne ich bisher auch nur vom Erzählen/Lesen.

                  Ciao,
                   Martin

                  --
                  Auch mit eckigen Radios kann man Rundfunk hören.
                2. Hi!

                  wenn PHP unter Windows installiert wird, dann werden auf Shell-Ebene automatisch Dateien mit der Endung .php mit der Anwendung php.exe verknüpft. Das heißt, ein Doppelklick auf eine PHP-Datei startet automatisch php.exe mit der angeklickten PHP-Datei als Argument.
                  Du meinst wenn ich z.B. XAMPP installiere? Muss ich morgen direkt mal ausprobieren.

                  Wohl kaum. Nach meinen Erfahrungen und Beobachtungen verhält sich XAMPP so neutral wie möglich. Ziel ist, einen Webserver zu installieren, den man ebenso leicht, wie man ihn hinkopieren kann, wieder löschen kann. Lediglich Dienste (wenn man sie installiert hat) und Startmenü-Icons bedürfen einer Sonderbehandlung. Er registriert jedenfalls von sich aus keine Dateiendungen beim Windows Explorer.

                  Auch das Windows-Installer-Paket von PHP (5.3.2) selbst integriert sich nicht in den Explorer.

                  Java mag ich irgendwie nicht. Keine Ahnung, hab einfach so eine Abneigung. Kann es nicht erklären.
                  C# werde ich mir unbedingt mal anschauen.

                  C# ist sprachlich gesehen einfach das bessere Java, finde ich.

                  Wenn du Windows-Programme erstellen willst, ist es mit einer nackigen Programmiersprache noch nicht getan. Die reine Syntax der Sprache und was man damit alles anstellen kann, spielt quasi in einer anderen Liga als das Windows-System. Von PHP und einfachen $programmiersprache-Programmen bist du es sicher gewohnt, von Anfang bis zum Ende die vollständige Kontrolle zu haben, nur gelegentlich taucht das Programm mit einem Funktionsaufruf kurz in die Tiefe ab. Ein Windows-Programm hat in der Regel nur einen mehr oder weniger kleinen Stummel, der eine Ereignisschleife (message loop) startet. Deine Aufgabe ist es dann, auf die Ereignisse des Systems zu reagieren. Du bekommst immer erst dann die Kontrolle wieder, wenn irgendein Ereignis auftritt, das du behandeln willst. Zudem verbringt man auch einen großen Teil der Zeit damit, Oberflächen zu designen. Das kann man zu Fuß machen, aber schneller kommt man in der Regel mit einer Oberfläche, mit der man die Elemente per Maus platzieren kann und ihnen diverse Eigenschaften einstellt. Man sieht das Ergebnis sofort, ohne erst einen Compile-Lauf und die Anwendung starten zu müssen.

                  Lo!

            2. Hallo Carsten,

              Nein, die Bekanntschaft mit C++ war sicher nicht nutzlos. Aber für mich persönlich eine Sackgasse. Ich könnte in der Richtung wieder anknüpfen, wenn es sich so ergibt, würde es aber freiwillig nicht tun.

              Das ist für mich als Quereinsteiger natürlich nicht gerade motivierend.

              Du solltest Dich nie ausschließlich von einer einzigen Meinung allein (positiv oder negativ) beeinflussen lassen, sondern immer das Gesamtbild betrachten.

              Ich persönlich finde C++ ganz nett, allerdings ist die Sprache sehr mächtig und man kann viel falsch machen. Man sollte sich daher ein einigermaßen aktuelles und gutes (!) Buch suchen, das modernes C++ erklärt, wenn man es lernen will - und sich eben nicht zum Ziel setzen, die *ganze* Sprache zu verstehen, sondern erst einmal nur das, was man braucht. Im Gegensatz zu z.B. PHP, wo man zumindest die Sprachfeatures selbst relativ schnell alle gelernt haben kann. (Mit Sprachfeature meine ich Verhalten der Sprache selbst, nicht irgendwelche Funktionen o.ä., was standardmäßig mitkommt.)

              Es gab übrigens erst kürzlichen einen netten Webcomic, der schön illustriert, was es heißt, C++ "komplett" zu lernen. ;-)

              Mein Problem, um an die Programmiererei für Windows (oder mit Fenstern allgemein) anknüpfen zu können, sind halt die fehlenden Vorkenntnisse.
              Ich dachte mit C++ kann ich sie mir optimal erwerben.

              Nein, das hat mit C++ nichts zu tun. Man kann in sehr vielen Programmiersprachen Programme mit Fenstern programmieren. Das einzige, was man da in der Regel gemein hat, ist, dass man da irgend eine Art von "Objektorientierung" hat, d.h. Dinge wie ein Fenster sind Objekte [1], die man irgendwie manipuliert. Das kann man in verschiedensten Programmiersprachen umsetzen. C++ ist dafür besonders geeignet, weil Objektorientierung in der Sprache selbst enthalten ist - aber in C kann man das genauso machen, dann ist halt die Objektorientierung "manuell" nachimplementiert.

              Was für das Programmieren von GUIs viel wichtiger ist, ist in meinen Augen das korrekte Toolkit, mit dem man die GUIs letztendlich erstellt, d.h. die Funktionen, die man aufruft, um letztendlich an das Fenster zu kommen. Es gibt da verschiedene Dinge - von Microsoft gibt's z.B. unter .NET Windows.Forms, von Apple gibt's Cocoa und es gibt plattformübergreifende Toolkits wie GTK und Qt - und viele mehr. Diese Toolkits sind alle am besten aus einer konkreten Sprache ansprechbar (meist in der, in der sie selbst geschrieben sind), bei Windows.Forms wäre das C#, bei Cocoa wäre das Objective-C, bei GTK wäre das C und bei Qt wäre das C++. Das heißt aber nicht, dass die nicht aus anderen Sprachen auch nutzbar sind: Qt kann man auch von Python aus nutzen, GTK von C++ aus, Windows.Forms von VB.Net aus.

              Daher: Wenn Du GUI-Entwicklung lernen willst, musst Du vor allem die Konzepte lernen, auf denen GUI-Toolkits aufgebaut sind. Es gibt etliche grundlegende Dinge, die bei fast allen Toolkits identisch sind (das Event-Loop z.B.), es gibt andere Dinge, in denen sie sich dann wieder unterscheiden. Die Programmiersprache an sich ist dann gar nicht mehr so extrem wichtig.

              Meine persönliche Empfehlung für ein geeignetes Toolkit wäre Qt. Das API ist in meinen Augen sehr gut designed, die Dokumentation ist in meinen Augen hervorragend und es kommt mit einem Startpaket mit (http://qt.nokia.com/downloads -> Qt SDK), das sowohl das Toolkit selbst als auch eine schlange IDE enthält, mit der man mit der Entwicklung beginnen kann. Qt selbst ist in C++ geschrieben, d.h. es wäre empfehlenswert, wenn Du Dir vorher ein paar C++-Grundlagen (ohne GUI-Zeug) aneignest, bevor Du dann mit der GUI-Programmierung loslegst.

              Aber Vorsicht: Ich wette, es gibt viele Leute hier, die Dir etwas völlig anderes empfehlen würden. ;-)

              [1] Das gilt selbst für das Windows-API - da gibt's halt kein direktes Objekt sondern einen HWND-Zeiger und lauter API-Funktionen zum Manipulieren desselben.

              Viele Grüße,
              Christian