C notwendig für C++?



  • Hi, wie der Titel schon verraten mag würde ich gerne wissen ob es sich lohnt C++ zu lernen wenn man C noch nicht kann.
    Ich bin ein (wie mein Name schon sagt ^^) extremer Grünschnabel. Ich habe nun einfach Sätze - ich weiß nicht - "programmiert" halt mit Zeilenumbruch und so, einfache Rechenarten berechnet und war gerade dabei mir anzugucken wie man Bedingungen einbaut.
    Nun hab ich irgendwie das blöde Gefühl, dass ich C erstmal lernen sollte, weil ich in einem Begleitheft zu einem Kurs gelesen habe, dass die Kenntnisse über C vorausgesetzt waren für die Kurse. Nun ... was ist denn jetzt?

    Mfg,
    DerNewb



  • Um C++ zu lernen brauchst du kein C. Was du brauchst ist ein gutes C++ Buch, siehe Bücherliste in der FAQ.

    *Edit
    Schau mal hier unter Anfänge in C++.



  • Danke danke ikarus ^^ übrigens cooler Name ... auch wenn er durch seine Erfindung starb find ich ihn cool



  • Imo hindert ein Wissen über C einen daran, guten C++-Code zu schreiben. Der wird dann eher - C.
    Dasselbe wie mit Wissen über Java, das wird dann auch Java in C++.



  • Das war nicht seine Erfindung...



  • Dann halt die ERfindung seines Vaters ^^ jetzt nörgel nicht über mein gesundes Halbwissen 🤡



  • Nathan schrieb:

    Imo hindert ein Wissen über C einen daran, guten C++-Code zu schreiben. Der wird dann eher - C.
    Dasselbe wie mit Wissen über Java, das wird dann auch Java in C++.

    Finde ich absolut nicht. Ohne C-Kenntnisse versteht man recht wenig von der Funktionsweise der Abstraktionen von C++ und naja - C++ bietet mehr als genug Stolperfallen.



  • Ich sehe das so, wie Stroustrup, Koenig und Moo (siehe Preface unter Sample Content)

    TL;DR:

    Wenn man an C++ interessiert ist, ist es ist eine blöde Idee, erst die "C-Untermenge" von C++ lernen zu wollen und danach den Rest. C++ bietet Dir nette High-Level-Bausteine in Form von Bibliotheks-Features, die man sofort benutzen kann, ohne dass man erst lernen und verstehen muss, wie man so etwas selbst bauen kann. Die Gefahr beim zuerst-C-Lernen ist die, dass man geneigt sein könnte, seinen C-Stil nach C++ zu importieren -- und das, obwohl dir C++ Mittel bietet, mit denen gewisse Dinge besser gelöst werden können. Wichtig ist jedenfalls, dass C++ nicht als C mit ein paar extra Features verstanden wird, sondern als eigene Sprache mit eigenen Mustern und Mitteln. C ist zwar quasi ein Teil von C++, aber das heißt nicht, dass man diesen Teil zu erst lernen muss.

    Also auch von mir der Tipp: Lerne C++ mit 'nem guten C++ Buch zur Hand.

    Ethon: Sprichst Du da aus Erfahrung? Hast Du C++ mit dem "modernen Lehransatz" vor C gelernt?



  • kkaw schrieb:

    Ethon: Sprichst Du da aus Erfahrung? Hast Du C++ mit dem "modernen Lehransatz" vor C gelernt?

    Ich hatte ein Buch das viel auf Abstraktionen wie zb. den STL-Containern aufgebaut hat, ja.
    Nur dumm dass ich primär an Systemprogrammierung interessiert war und mit den low level APIs dadurch teilweise durchaus zu kämpfen hatte.
    Nach einem Ausflug nach Assembler-Land war mir C und C++ total klar.
    Dummerweise habe ich mir dabei ein Lowlevel-Denken angewöhnt dass ich nicht mehr ablegen kann.



  • Nathan schrieb:

    Imo hindert ein Wissen über C einen daran, guten C++-Code zu schreiben.

    Aber C++ ist aus C entstanden, also gibt es kein gutes C++.



  • Ethon schrieb:

    Nathan schrieb:

    Imo hindert ein Wissen über C einen daran, guten C++-Code zu schreiben. Der wird dann eher - C.
    Dasselbe wie mit Wissen über Java, das wird dann auch Java in C++.

    Finde ich absolut nicht. Ohne C-Kenntnisse versteht man recht wenig von der Funktionsweise der Abstraktionen von C++ und naja - C++ bietet mehr als genug Stolperfallen.

    Der Meinung bin ich auch.

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Jeder Programmierer sollte daher C können, an C geht kein Weg vorbei. Dies gilt auch dann, wenn man heute in anderen Sprachen programmiert.

    Etwas anders sieht es vielleicht bei funktionalen Sprachen wie Haskell aus, aber das ist ein komplett anderes Thema, so wie Äpfel und Birnen.
    Aber auf C baut fast alles gängige auf, C++, Java, C#, D und viele andere.



  • C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Was hat das mit C zu tun? Das kann man in C++ genauso ohne C lernen zu müssen. C++ besitzt die Zeiger ja ebenso, dennoch muss man nicht C-APIs lernen um dieses Thema zu verstehen.

    C sind Grundlagen schrieb:

    Jeder Programmierer sollte daher C können, an C geht kein Weg vorbei. Dies gilt auch dann, wenn man heute in anderen Sprachen programmiert.

    Merkwürdig: Ich habe nie C gelernt und programmiere inzwischen etwa 15 Jahre beruflich (Vorwiegend übrigens mit C++). Das (sehr) wenige wirklich rein "C-spezifische" das ich brauche (und das auch nur wegen ein paar C-APIS die ich beruflich einsetzen musste), habe ich mir später angeeignet.

    C sind Grundlagen schrieb:

    Aber auf C baut fast alles gängige auf, C++, Java, C#, D und viele andere.

    Man braucht kein bisschen pures C um C++, Java und C# zu lernen, eher im Gegenteil wenn ich mir den Code anschaue, den manche die aus der C-Welt kamen in eben jenen Sprachen produziert haben (Das mag nicht zwangsweise an C gelegen haben, nur war die Schnittmenge schlecht wartbaren Codes bei diesen Programmierung wesentlich höher als in anderen Gruppen).

    Wer C++ lernen will, braucht nur ein gutes C++ Buch. Das was er von "C" braucht (sagen wir lieber: von der Schnittmenge die in C und C++ identisch sind), deckt ein solches Buch in der Regel auch ab. Beispielsweise Zeiger (wenn dies ggf. aber an einer anderen [späteren] Stelle als in einem C-Buch vorkommt).



  • asc schrieb:

    [...]

    👍



  • interessant. Falls das stimmen sollte, dann für asc und dich eine ...

    ... Aufgabe: Schreibe ein Programm, das "hello, world" ausgibt, und zwar 1) in C++ und 2) unter Verzicht auf alle Sprachelemente, die auch in C vorkommen. Müßte ja einfach sein, wenn man in C++ angeblich kein C braucht.

    "main" fällt schon mal weg (das wird dem Linker gar nicht gefallen), das Semikolon auch, geschweifte Klammern dito. #include und die spitzen Klammern natürlich auch.

    Da wird es aber ziemlich eng mit der Auswahl an Sprachelementen, würde ich meinen:

    iostream 
    
    std::cout <<         << std::endl
    

    Soviel zur immer wieder aufpoppenden Behauptung, man könnte in C++ programmieren, ohne C zu benutzen.



  • großbuchstaben schrieb:

    ... Aufgabe: Schreibe ein Programm, das "hello, world" ausgibt, und zwar 1) in C++ und 2) unter Verzicht auf alle Sprachelemente, die auch in C vorkommen. Müßte ja einfach sein, wenn man in C++ angeblich kein C braucht.

    Du bist auch aus deinem Vater und deiner Mutter hervorgegangen, heißt das du musst dich zwangsweise wie Selbige verhalten?

    C++ ist schon lange nicht mehr ein um Klassen aufgebohrtes C, sondern hat sich in eine eigenständige Sprache weiter entwickelt - die aber weitgehend (aber nicht komplett) zu C abwärtskompatibel ist. Eine Schnittmenge von Sprachelementen sagt nicht, das man beide Sprachen lernen muss, oder das eine Sprache eine andere ist.

    Man muss nicht separat C lernen um C++ zu können. Wenn ein Sprachelement in C++ wichtig ist, wird es auch in einem C++ Buch beschrieben, unabhängig ob es aus einer anderen Sprache übernommen wurde oder nicht. "Kindergarten" mag in Deutsch und Englisch existieren geschrieben werden, das heißt dennoch nicht das man beide Sprachen beherrschen muss.

    Ich kenne bis heute nur einen sehr kleinen Teil der C-API (ich nutze nur den Teil, für den bislang keine eigene C++ Bibliothek geschrieben wurden ist; würde ich C++11 nutzen können, bräuchte ich noch weit weniger als bislang). Auch bin ich z.B. mit malloc und free nur in einem Projekt überhaupt in Berührung gekommen, und das auch nur weil ein anderer Programmierer diese wild mit new/delete gemischt hat, und ich die Fehler ausbauen durfte.

    Man nutzt in C++ in der Regel andere APIs und nur einen Teil der vorhandenen Schnittmenge beider Sprachen. Auch die Denk- und Lösungsansätze sind häufig andere.



  • DerNewb schrieb:

    Hi, wie der Titel schon verraten mag würde ich gerne wissen ob es sich lohnt C++ zu lernen wenn man C noch nicht kann.
    Ich bin ein (wie mein Name schon sagt ^^) extremer Grünschnabel. Ich habe nun einfach Sätze - ich weiß nicht - "programmiert" halt mit Zeilenumbruch und so, einfache Rechenarten berechnet und war gerade dabei mir anzugucken wie man Bedingungen einbaut.

    Das ganze wird so oder so ein Flamewar und beide Parteien haben recht.
    C++ ist eine Erweiterung zu C. Nun gibt es zwei Sichten: Die übliche Sicht ist, dass C-Entwickler eine veraltete Denke haben und man daher auf gar keinen Fall C lernen sollte, damit man diese veraltete Denke nicht übernimmt und die zweite Sicht, die ich eher teile, dass C nunmal die Grundlage von C++ ist. Ich habe erst C gelernt, und als ich C++ lernte, hat sich gezeigt, dass ich in vielen Dingen schon die C++-Denke hatte.

    Vollkommen unabhängig davon, wie Du Dich entscheidest, Du wirst zu Beginn die wichtigsten Datentypen kennenlernen, Du wirst lernen Funktionen zu schreiben und diese zu rufen, Bedingungen und Schleifen zu formulieren. usw. Ohne die Grundlagen von C++, die nunmal C komplett ausmachen, kannst Du auch kein C++ programmieren, denn C++ formuliert keine (bzw. ab C11 wenige) neue Konstrukte für Bedingungen und Schleifen - und das Grundprinzip ist letztlich doch bei allen identisch.
    Wenn Du nun ein C++ Buch kaufst, wirst Du dieselben Grundregeln lernen, als würdest Du ein C Buch kaufen. Du wirst einige Details anders lernen, dass Du std::cout zur Ausgabe nutzt statt printf(), aber printf() ist in C++ genauso enthalten und löst weiterhin dasselbe Problem.

    Die Diskussion ist also heute eher akademischer Natur und wenn ich ehrlich bin, würde ich mich darauf gar nicht erst einlassen. Wenn Du die Grundlagen lernen möchtest, kauf Dir ein C Buch, wenn es Dir gefällt oder ein C++-Buch, wenn Dir dieses besser gefällt: Es steht dasselbe drin - im C++ Buch nur kürzer.

    Mein Tipp ist eher, kauf Dir kein Buch, was dicker als 300 Seiten ist. Dickere Bücher arbeitet kein Mensch durch und häufig ist da viel Blabla-Text nur drin, um das Buch dick zu machen.
    Viele C++ Bücher arbeiten die Grundlagen dann sehr schnell durch, um mehr Platz für C++-Features zu haben und wer C++ lernt, kann häufig schon die Grundlagen aus einer anderen Programmiersprache.

    DerNewb schrieb:

    Nun hab ich irgendwie das blöde Gefühl, dass ich C erstmal lernen sollte, weil ich in einem Begleitheft zu einem Kurs gelesen habe, dass die Kenntnisse über C vorausgesetzt waren für die Kurse. Nun ... was ist denn jetzt?

    Das bedeutet in meiner Meinung nach, dass Du z.B. Funktionen, Bedingungen und Schleifen drauf haben solltest und vielleicht eine Vorstellung davon, wie Du ein Problem alleine mit diesen Mitteln formuliert bekommst, bevor Du in diesen Kurs gehst und mehr darüber lernst, wie man Probleme und Quelltexte besser aufbauen kann, als es C-Anfänger üblicherweise tun. Die Quelltexte eines C-Profis unterscheiden sich kaum von einem C++-Semiprofessionellen.
    Als C++ Profi wirst Du jedoch Möglichkeiten haben, die deutlich über C hinaus gehen - ich gehe aber nicht davon aus, dass Dein Kurs das leisten wird.

    Um "Profi" zu werden wird ein Buch oder Kurs soweiso nicht reichen, Du wirst mit vielen Leuten diskutieren und nicht wenige werden Dir erklären, dass Du das alles total falsch machst. Je mehr Meinungen Du gehört hast, desto eher wirst Du eine gute Lösung für Dein Problem finden. Ganz am Anfang aber ist Dein Problem aber die Grundlagen der Programmierung zu lernen und da ist es einfach wichtig, ein halbwegs passendes Buch zu öffnen und mit dem Lernen anzufangen und später im Kurs den Mund aufzumachen, wenn Du etwas nicht verstanden hast.



  • Jetzt wird die Diskussion aber echt unsinnig...
    Als ob mit der Frage gemeint ist, ob man for-Schleifen & co kennen sollte 🙄

    Wenn mit der Frage gemeint ist, ob man pures C beherrschen muss, um C++ zu können, dann von mir ein klares nein!

    Ich könnte zumindest kein fehlerfreies C-Programm ohne Kompiler-Check schreiben (schon allein, weil ich mit Sicherheit nicht daran denken würde, Variablen am Funktionsanfang zu deklarieren).
    Komme aber trotzdem gut klar mit C++.



  • C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Wie will man Zeiger in C verstehen wenn man das sowas nie in Assembler geschrieben hat? Wie will man Assembler verstehen wenn man nie eine CPU designed hat? ... Wie will man Strom verstehen wenn man nie ... 😉
    Man setzt halt auf irgendeiner Abstraktionsebene an. Es ist manchmal gut wenn man auch die tieferliegenden kennt, aber nicht immer nötig. Das ist ja grad das tolle an Abstraktion solange sie nicht leaky ist. 🙂



  • asc schrieb:

    C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Was hat das mit C zu tun? Das kann man in C++ genauso ohne C lernen zu müssen. C++ besitzt die Zeiger ja ebenso, dennoch muss man nicht C-APIs lernen um dieses Thema zu verstehen.

    Wenn man C auf die C-Standard-Bibliothek reduziert - dann stimme ich dir halb zu, mittlerweile ist doch ein großer Teil davon als C++-Variante verfügbar. (Vor C++11 gab's aber zb noch kein <chrono> oder <random> )

    Aber mit C-Programmierung assoziere ich in erster Linie die "dreckige" Lowlevel-Arbeit. Und bei der ist es nicht schlecht sie zu verstehen, nur weil es std::string gibt bedeutet das imho nicht dass man keine Ahnung haben sollte wie man in C mit Strings umgehen würde.



  • Ethon schrieb:

    Aber mit C-Programmierung assoziere ich in erster Linie die "dreckige" Lowlevel-Arbeit. Und bei der ist es nicht schlecht sie zu verstehen, nur weil es std::string gibt bedeutet das imho nicht dass man keine Ahnung haben sollte wie man in C mit Strings umgehen würde.

    Jedes gute C++ Buch geht auf Zeiger ein, dazu muss man sich nicht mit C-Strings rumquälen. Ich finde diesen Weg auch gut, ein Anfänger lernt schrittweise besser, man sollte nicht alle Komplexität gleich an den Anfang stellen. In C++ kann man sich schon an einfache Programme mit Ein-/Ausgabe heran tasten, ohne sich gleich um Zeiger zu kümmern.

    Nutzt ihr Geräte erst, nachdem ihr sie anfangs zerlegt habt? Man kann auch erst das "Nutzen" lernen, bevor man in die Details geht.

    Xin schrieb:

    Ohne die Grundlagen von C++, die nunmal C komplett ausmachen...

    Dem widerspreche ich schon. Die Grundlagen die man für die sinnvolle C++ Programmierung benötigt, machen C eben nicht komplett aus. Man benötigt nicht Alles was die Sprache C anbietet um gutes C++ zu schreiben. Ebenso wie man kein C++, Java und Delphi können muss, um C# zu lernen (Und C# basiert u.a. auf diesen Sprachen).


Log in to reply