Ich kenne C # ziemlich gut (leider autodidaktisch) und muss für eine Windows-Anwendung etwas C ++ programmieren. Ich konnte eine Menge Informationen für C ++ - Entwickler finden, die C # gelernt haben, aber ich konnte nicht viel zum Erlernen von C ++ finden, wenn Sie C # bereits kennen. Hat jemand einen guten Überblick über die Grundlagen gefunden?
MSDN hat einen Vergleich, der jedoch nicht sehr ausführlich ist.
Ich kann mehrere Quellen zusammenfügen, habe aber herausgefunden, dass etwas da draußen ist - ich kann es einfach nicht finden. Danke für Ihre Hilfe.
Antworten:
Dieser Thread für C ++ für Java-Entwickler ist sehr ähnlich und sollte nützlich sein, insbesondere Mark Byers Beitrag:
Am wichtigsten ist es wahrscheinlich , den Unterschied zwischen den Speicherverwaltungstechniken in C # / Java und C ++ zu verstehen .
Einer meiner Profis hatte einen Java-Hintergrund und unterrichtete einen Einführungskurs in C ++. Nichts, was er erklärte, ergab für irgendjemanden einen Sinn. Er hatte überall Speicherlecks gehabt. Seine Zeigerarithmetik war schrecklich. Er kam nie zum OOP-Teil des Lehrplans (Gott sei Dank). Praktisch nichts, was er demonstrierte, hätte zusammengestellt. Er verstand nicht, dass
char[]
ein Wachposten nötig war\0
. Nicht wie er enden.quelle
char[]
dann ist es nicht?char[]
es in C ++ selten verwendet wird, heißt das nicht, dass es nicht unterrichtet wird oder dass es nicht unterrichtet werden sollte.char[]
Es ist immer noch wichtig, sich dessen bewusst zu sein, weil C ++ eine Obermenge von C ist, und es ist unerlässlich, dass es richtig verstanden wird, wenn es überhaupt gelernt werden soll.std::string
, und wenn Sie mit einer C-API interagieren müssen, ist dies der Grundc_str()
dafür. Es besteht keine Notwendigkeit für den Programmierer, sich damit zu befassenchar[]
oder NULL zu beenden. Das String-Handling im C-Stil ist für jede mögliche Verwendung völlig veraltet, mit Ausnahme der Interoperabilität mit altem C-Code, der perfekt gehandhabt wirdc_str()
.char[]
richtiges Unterrichten , weil alle Verwendungen vonchar[]
falsch sind. Ihr Professor wäre wahrscheinlich vollkommen in Ordnung gewesen, wenn er sich an C ++ anstatt an C gehalten hätte.Leider ist an C ++ nicht viel Grundlegendes zu beachten, sodass ich Ihre Hoffnungen nicht in die Höhe treiben würde. Darüber hinaus wissen Sie nur wenig über C #, das sogar remote auf C ++ übertragbar ist. Daher würde ich nicht erwarten, dass es ein bestimmtes Material für diesen Winkel gibt. Sie müssen von Grund auf lernen.
quelle
cout
und einfache Wege, um einfache Ziele zu erreichenEs gibt keine einfache Lösung dafür, C ++ ist nicht besonders schwierig, aber für Anfänger nicht einfach.
Ich würde empfehlen, sich mit den Grundlagen der C-Programmierung vertraut zu machen (um einen Überblick über die Dinge auf niedrigem Niveau zu erhalten) und dann die STL zu lernen, gefolgt von Artikeln von Leuten wie Scott Meyers. Hier ist eine Einführung, die zeigt, wie Sie modernes C ++ im Vergleich zu C-with-classes schreiben sollten.
quelle
reading up on C programming
. Ich denke, das schadet mehr als es nützt und vertritt die Auffassung, dass C und C ++ Sprachen sind, die zusammen gelernt werden müssen.delete
C-Arrays und andere Dinge verwende, von denen in C ++ abgeraten wird, als sie es taten. Ich schreibe dies NICHT explizit auf C. C ist relativ einfach, Sie können ziemlich schnell herausfinden, was der Code tut.malloc
undfree
. Ein großartiger C ++ - Entwickler wird irgendwann etwas über sie wissen wollen. Mit ihnen anzufangen ist eine ganz andere Sache.Ich bin mir nicht sicher, ob Sie noch nach Materialien suchen. Ich habe diesen Artikel vor ein paar Monaten gefunden. Es ist kein Buch (nur 53 Seiten). Die Einführung sagt alles:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
Und es gibt auch einen Update-Beitrag:
http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx
Viel Spaß beim Lernen :)
quelle
quelle
Ich finde es gut, dass Sie nicht zu viele C # - bis C ++ - Tutorials finden. Sie können wahrscheinlich Ihr Gehirn durcheinander bringen. Es ist fast so, als würde man zuerst lernen, Motorrad zu fahren und dann auf ein Fahrrad umzusteigen (keine ganz angemessene Anologie, aber man bekommt die Idee). Es ist besser für Sie, ein neues Buch über C ++ zu nehmen. Da Sie bereits mit den OOP-Konzepten vertraut sind, können Sie entweder die langen Einführungen in die OOP-Konzepte überspringen (sie sind für Benutzer gedacht, die von C nach C ++ migrieren). Oder suchen Sie direkt nach einem Nachschlagewerk für Anfänger bis Fortgeschrittene oder Fortgeschrittene.
quelle
Ich würde empfehlen, zu Rosetta Code zu gehen und die beiden zu vergleichen. Während Sie dort sind, halten Sie einen Link mit C ++ - Redewendungen bereit und versuchen Sie, diese zu finden. Verbringen Sie dann einige Zeit im Bereich Zeiger / Referenz / Speicher / Destruktor. Danach lernen Sie den Präprozessor kennen - er kann wirklich Ihr Freund sein, wenn es darum geht, die Hässlichen zu verstecken, ich vermisse ihn irgendwie. Schließlich ist die STL.
quelle
Vor ungefähr einem Jahr saß ich also im selben Boot wie Sie: Autodidakt C # Dev, der das Bedürfnis verspürte, C ++ zu lernen. Zugegeben, ich habe mehrmals angehalten und angefangen. Bei meinem dritten Versuch habe ich es endlich geschafft.
Was unbedingt zu verstehen ist, ist, dass Sie in Bezug auf C ++ - und C # -Methoden wahrscheinlich viel Zeit damit verbringen werden, zu verstehen, welche Datenbearbeitungsmethoden durch Zeiger und Verweise tatsächlich verwendet werden bedeuten und wann und wie sie unter den gegebenen Umständen verwendet werden.
Das Schöne an C ++ ist, dass die Objektstapelzuweisung zum größten Teil recht einfach ist. Sie sollten Objekte auf diese Weise zuweisen, wenn Ihr Programm die unter dieser Methode angegebenen Anforderungen erfüllt. Andernfalls verlassen Sie sich auf Hinweise für Geschwindigkeit, Effizienz und schnelle Bereinigung. Ich empfehle dies zu lesen: http://www.parashift.com/c++-faq-lite/ da es Ihnen eine Menge technisches Verständnis darüber gibt, wie C ++ unter der Haube funktioniert.
Lassen Sie mich Ihnen ein Beispiel geben:
In C ++ gibt es diese Konstruktorimplementierung, die als "Initialisierungsliste" bezeichnet wird und sich von der Initialisierung von Klassenmitgliedern im Rumpf eines Konstruktors unterscheidet. Warum? Denn wenn der zu initialisierende Typ nicht primitiv ist, erstellt der Compiler tatsächlich mehrere und unnötige Kopien des Objekts, das beim Zuweisen im Hauptteil des Ctors erstellt wird. Dies kann je nach Compiler und den skalierten Anforderungen der App zu Leistungseinbußen führen.
Wissen Sie, was ein Delegierter ist? Nun, in C ++ ist es als Funktionszeiger bekannt . Diese Sprache ist anfangs ziemlich schwer zu beherrschen, aber wenn du großartig sein willst ... ist es definitiv erforderlich.
C # ist einfach ... sehr einfach.
quelle
Glauben Sie mir, wählen Sie ein gutes Buch über C ++ (es gibt noch viel mehr, machen Sie einfach eine Suche) und beginnen Sie zu lernen ...
quelle