Erst C oder gleich C++ ???



  • Hallo zusammen,

    ich möchte gerne C++ jetzt richtig anfangen zu lernen.

    Ich weis jetzt aber nicht wie ich am besten anfange...ich hab mir vor nem halben Jahr, oder so, das Buch "Jetzt lernen ich C++" in einer Bücherei ausgeliehen.Hat mir ganz gut gefallen, bin auch weit gekommen.Somit habe ich etwas erfahrung in C++ aber keine in C.
    Vorher hatte ich in der Schule mit VB programmiert. Und jetzt auf dem Gymnasium programmieren wir mit Java.

    Ich schwanke grad, weil ich will mir jetzt ein Buch kaufen will.

    Entweder "Jetzt lerne ich C" oder "Jetzt lernen ich C++".

    Ich möchte auch gerne nach dem Abi Informatik oder ähnliches studieren.Wie sieht es da aus, welche Programmiersprachen werden bevorzugt?



  • Wenn du SOWIESO C++ lernen willst unabhaengig davon ob du auch C lernen willst ist es besser GLEICH C++ zu lernen.

    "Jetzt lerne ich C++" ist eine sehr schlechte Empfehlung und behandelt Standard C++ nicht - nur veralteten C++.

    Viel empfehlenswerter ist das Buch "Einfuehrung und professionelle Programmierung" von Ulrich Breymann - es wird sogar Ruecksicht auf den kommenden C++-Standard genommen und ist fuer Einsteiger ideal.

    C-Kenntnisse sind nicht nur nicht erforderlich, sondern sogar eine schlechte Empfehlung, wenn du C++ lernen willst.

    Cartman



  • Eric Cartman schrieb:

    C-Kenntnisse sind nicht nur nicht erforderlich, sondern sogar eine schlechte Empfehlung, wenn du C++ lernen willst.

    Huch, wieso das denn?



  • Da C sich in einigen bereichen anderst verhält bzw. manche Dinge in C anderst angegangen werden müssen.
    Simpelstes Beispiel sind casts ( *_cast<type>() vs. (type) ) oder Generische Programmierung ( template vs. void* )

    mfg branleb



  • Ich würd lieber C lernen, ist viel mächtiger. Mit C++ bist du im Prinzip auf sehr high level Anwendungen beschränkt. Mit C kannst du die richtig wichtigen Dinge machen, die es überhaupt erst möglich machen, daß C++ Anwendungsentwickler ihre bunten Fenster- und Useranwendungen zusammenprogrammieren können.



  • branleb schrieb:

    Da C sich in einigen bereichen anderst verhält bzw. manche Dinge in C anderst angegangen werden müssen.
    Simpelstes Beispiel sind casts ( *_cast<type>() vs. (type) ) oder Generische Programmierung ( template vs. void* )

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    kernal atatürk schrieb:

    Ich würd lieber C lernen, ist viel mächtiger. Mit C++ bist du im Prinzip auf sehr high level Anwendungen beschränkt.

    Diesen Schwachsinn will ich nur mit einem "Schwachsinn" kommentieren: Schwachsinn.



  • Tim schrieb:

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    Es hindert den Fortschritt da du C konstrukte ja auch in C++ verwenden kannst und wozu solltest du dann die C++ konstrukte lernen? Und das fuehrt zu einem C mit Klassen. Weil eben die wenigsten genug disziplin haben c und c++ zu trennen...



  • @Tim:
    Das Thema wurde doch im Forum nun oft genug durchgekaut,
    das Fazit hat Shade of Mine gut auf den Punkt gebracht, finde ich.

    mfg branleb



  • Shade Of Mine schrieb:

    Tim schrieb:

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    Es hindert den Fortschritt da du C konstrukte ja auch in C++ verwenden kannst und wozu solltest du dann die C++ konstrukte lernen? Und das fuehrt zu einem C mit Klassen. Weil eben die wenigsten genug disziplin haben c und c++ zu trennen...

    Mit der Argumentation dürfte man nach C (oder sonstwas) gar keine andere Sprache mehr lernen (können).
    Dass man mit C schon einen sehr großen Teil von C++ kennt wird hier schön verschwiegen.

    @branleb: Und deshalb muss ich mich der allgemeinen Meinung anschliessen?



  • c und c++ sind syntaktisch zu dicht beieinander. das ist das problem. man kommt von seinen jugendsünden in c nicht los, wenn man auf c++ umsteigt.
    es ist kein problem. c -> java -> c++ zu gehen. ich befürworte basic -> c++.
    nur c -> c++ ist tödlich. da braucht man ungefähr die gleiche zeitspanne, die man zur erlernung von c gebraucht hat, um sich die unsitten von c innerhalb von c++ abzugewöhnen. bei basic -> c++ ist ein harter syntaktischer bruch dazwischen. das erlaubt es einem, die gehversuche in basic mit abstand zu betrachten und in c++ dann erst recht nicht so verworren zu programmieren. viele andere gute kombinationen sind möglich.
    ich denke, allen guten langzeitplänen gemein ist, daß c nach c++ kommt und daß eine lispoide sprache darin vorkommt.

    edit: nein, das ist gar nicht das ganze problem. das ganze problem ist, daß in der c-gemeinde viele konzepte gepflegt werden, die (in jeder sprache) seit 25 jahren überholt sind, daß ungern neue c-tutorials geschrieben werden, und daß man sich alten mist angewöhnt, wenn man zur problemlösung willkurlich googelt. aber man kann ja noch nicht anders, woher sollte man wissen, was wie toll ist? hauptsache, es geht erstmal. mist. mit c -> c++ schubst man diesen mumpitz dann in eine der sprachen, wo die wahrscheinlichkeit nicht ganz gering ist, bei ihr dann langfristig zu landen. das wäre suboptimal.



  • Pascal



  • Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.
    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    mfg Branleb



  • Ganz davon abgesehen, das in C Dinge funktionieren, die in C++ nicht funktionieren (bin kein C-User, hoffe das ist korrekt):

    int i = 10;
    // ...
    int m; // error in C++, in C kein Problem
    

    Warum sollte das ein C++-Einsteiger unbedingt lernen? Er weiß es dann vielleicht, kann damit aber in C++ nichts anfangen. Er sollte lieber lernen, einen [i]std::vector* zu benutzen - halt C++! Und das ist nur ein Beispiel von vielen, was C und C++ unterscheidet.



  • Hey, warum werden meine eckigen Klammern weg gefiltert? Stimmt mein Text oben nicht mehr...



  • NichtVersteher schrieb:

    Hey, warum werden meine eckigen Klammern weg gefiltert? Stimmt mein Text oben nicht mehr...

    Ha Ha :p



  • So, nochmal:

    int n = 10;
    // ...
    int m[n]; // error in C++, in C kein Problem
    

    man darf wohl in den cpp-Codetags keine []-Operatoren mit nem i drin verwenden...

    Egal... jedenfalls ist das jetzt korrekt.





  • branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Leider haben die C-Fans noch nicht mitbekommen, das es kein C/C++ mehr gibt. Sie halten C++ für die Sprache, die angeblich ohne C nicht auskommt. Deshalb ist es anscheinend Verrat am König, wenn jemand der C++ lernen will, kein C mehr empfohlen bekommt.

    Natürlich sieht die Realität heute anders aus: es gibt heute C und C++. Und schon lange kein C/C++ mehr.

    Bjarne Stroustrup, http://www.research.att.com/~bs/bs_faq.html#C-slash schrieb:

    There is no language called „C/C++“. The phrase is usually used by people who don't have a clue about programming (e.g. HR personnel and poor managers). Alternatively, it's used by people who simple do not know C++ (and often not C either).



  • branleb schrieb:

    Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Was das mit dem Thema zu tun haben soll weisst nur du.

    branleb schrieb:

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Du besschreibst hier Eigenschaften von C++, aber nicht inwiefern das einen C-Programmierer hindern soll diese Dinge zu erlernen.

    branleb schrieb:

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    hier ebenso...

    branleb schrieb:

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Jo, ich bin mir 100%ig sicher, dass dieser Mann hier die Objektivität in Händen hält...

    branleb schrieb:

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.

    C war nie eine sauberer Untermenge von C++ (zumindest nicht seit den standardisierten "Versionen").

    branleb schrieb:

    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Das hat hier sicher niemand bezweifelt.

    branleb schrieb:

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Niemand hat gesagt, dass der OP zuerst C lernen sollte. Du solltest den Thread vielleicht nochmal lesen.

    branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Oh, angegriffen habe ich dich erst mit diesem Post. Und jetzt darfst du offiziell heulen gehen und dir eine Scheibe von volkards Argumentation abschneiden. Diese ist, auch wenn ich ihr nicht unbedingt zustimme, schlüssig und stützt sich nicht auf Lächerlichkeiten wie "das richtige main()"...



  • Tim schrieb:

    branleb schrieb:

    Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Was das mit dem Thema zu tun haben soll weisst nur du.

    branleb schrieb:

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Du besschreibst hier Eigenschaften von C++, aber nicht inwiefern das einen C-Programmierer hindern soll diese Dinge zu erlernen.

    branleb schrieb:

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    hier ebenso...

    branleb schrieb:

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Jo, ich bin mir 100%ig sicher, dass dieser Mann hier die Objektivität in Händen hält...

    branleb schrieb:

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.

    C war nie eine sauberer Untermenge von C++ (zumindest nicht seit den standardisierten "Versionen").

    branleb schrieb:

    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Das hat hier sicher niemand bezweifelt.

    branleb schrieb:

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Niemand hat gesagt, dass der OP zuerst C lernen sollte. Du solltest den Thread vielleicht nochmal lesen.

    bis hier muss ich wohl eine daumenhoch geben. 👍

    Tim schrieb:

    branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Oh, angegriffen habe ich dich erst mit diesem Post. Und jetzt darfst du offiziell heulen gehen und dir eine Scheibe von volkards Argumentation abschneiden. Diese ist, auch wenn ich ihr nicht unbedingt zustimme, schlüssig und stützt sich nicht auf Lächerlichkeiten wie "das richtige main()"...

    hier habe ich doch ein leichtes >>auch wenn ich ihr nicht unbedingt zustimme<< gehört. ja, da gibt es eine lücke. und zwar die:
    angenommen, man ist voll empfänglich für programmier-begriffe. also so ein totaler schnellbegreifer. dann ist es in der tat effektiver, man lernt c VOR c++. ist total überbewertet, da die meisten im NACHHINEIN schauen, was sie in welcher reihenfolge gelernt haben sollten. Prof Dankert preferiert c vor c++, und der hat ahnung. ich unterstelle ihm aber, daß er da von sich auf andere schließt, insofern es eine empfehlung am die allgemeinheit ist. sicherlich war oder wäre es gewesen effektiver für ihn selber c -> c++ zu nehmen.


Anmelden zum Antworten