Einstiegsfragen eines Java-Umsteigers
-
Hallo Community,
ich programmiere nun seit einigen Jahren Java, bin aber jetzt der Meinung ich muss mir auch mal den anderen Giganten ansehen.
Ich hab hier ein Buch "C++ professionell lernen & anwenden", aber man wird da ohne große Einleitung ins kalte Wasser geworfen.Ich würde gerne einige generelle Dinge klären die mir gerade unklar sind,
bevor ich mich in die Welt der Speicherleaks und Call-By-Reference-des-Todes werfe. (War'n Scherz :D)-
Ist http://www.cppreference.com/wiki/ die offizielle und vollständige C++ API?
-
Ich hab mir Visual C++ 2008 heruntergeladen, einfach mal blind. Ist das ne gute IDE? Ich will keine riesen Diskussion starten, aber vllt ist das ja genau die schlechteste IDE ever..
-
kann ich irgendwas beim Programmieren mit C++ kaputt machen? Das mag jetzt vllt dumm klingen, aber ich hab riesen Respekt vor Pointern auf den Speicher, und ich frage mich gerade ob ich mir mal eben den halben PC trashen kann beim anfänglichen - und sicherlich höchst fahrlässigen - Experimentieren damit ?!
-
Auf was muss ich sonst noch alles achten beim plattformabhängigen Programmieren, im Hinblick auf differenziertes Verhalten eines C++ Programms auf verschiedenen Rechnern? Hab schon mitbekommen dass zB Datentypen je nach System unterschiedlich viel Speicher belegen.. An solche Dinge denke ich als eingefleischter Javaianer gar nicht, hat jmd vllt eine kleine Liste der größten Unterschiede? (Vorallem solche, die böse enden können wenn man sich deren nicht bewusst ist)
...ich danke für eure Antworten

-
-
hdi schrieb:
- Ist http://www.cppreference.com/wiki/ die offizielle und vollständige C++ API?
Was vergleichbsres zur Java API gibt es in dem Umfang nicht für C++. Es gibt offiziell den C++ Standard der beschreibt aber mehr die Sprache und jede Menge Details die du dir als Anfänger sparen kannst. Um einigermaßen sinnvoll Programme mit GUI schreiben zu können brauchst du immer zusätzliche Libs.
- Ich hab mir Visual C++ 2008 heruntergeladen, einfach mal blind. Ist das ne gute IDE? Ich will keine riesen Diskussion starten, aber vllt ist das ja genau die schlechteste IDE ever..
Ist OK
- kann ich irgendwas beim Programmieren mit C++ kaputt machen? Das mag jetzt vllt dumm klingen, aber ich hab riesen Respekt vor Pointern auf den Speicher, und ich frage mich gerade ob ich mir mal eben den halben PC trashen kann beim anfänglichen - und sicherlich höchst fahrlässigen - Experimentieren damit ?!
Fängt alles spätestens das OS ab.
-
hdi schrieb:
- Ist http://www.cppreference.com/wiki/ die offizielle und vollständige C++ API?
Ich kenne die Seite nicht so richtig. Aber es sie so aus, ja. Ich benutze gerne diese hier.
hdi schrieb:
- kann ich irgendwas beim Programmieren mit C++ kaputt machen? Das mag jetzt vllt dumm klingen, aber ich hab riesen Respekt vor Pointern auf den Speicher, und ich frage mich gerade ob ich mir mal eben den halben PC trashen kann beim anfänglichen - und sicherlich höchst fahrlässigen - Experimentieren damit ?!
Kommt drauf an. Im "user mode" unter einem modernen Betriebssystem kannst Du eigentlich nichts kaputt machen. Falls Du da etwas falsch machst, wird das Programm meist vom Betriebssystem abgebrochen und Du bekommst eine Schutzverletzung-Fehlermeldung zu sehen.
hdi schrieb:
- Auf was muss ich sonst noch alles achten beim plattformabhängigen Programmieren,
Das ist eigentlich etwas unglücklich ausgedrückt. Du kannst natürlich auch plattformunabhängig in C++ programmieren. Dafür muss man die Garantien kennen, die der C++ Standard macht und wissen, wie man Implementierungsdetails erfragen kann. Wenn Du Dich nur auf das verlässt, was der Standard sagt, dann programmierst Du plattformunabhängig. Wenn Du bestimmte Implementierungsdetails ausnutzt, die nicht garantiert werden und nur auf bestimmten Plattformen gelten, dann programmierst Du plattformabhängig.
hdi schrieb:
im Hinblick auf differenziertes Verhalten eines C++ Programms auf verschiedenen Rechnern? Hab schon mitbekommen dass zB Datentypen je nach System unterschiedlich viel Speicher belegen.. An solche Dinge denke ich als eingefleischter Javaianer gar nicht, hat jmd vllt eine kleine Liste der größten Unterschiede? (Vorallem solche, die böse enden können wenn man sich deren nicht bewusst ist)
Siehe dazu
Integer Types in C and C++
climits (C++) / limits.h (C)
limits (C++)Noch ein Tipp: Als Java-Programmierer wirst Du wahrscheinlich erst dazu neigen, relativ viel "new" zu benutzen. Das solltest Du Dir abgewöhnen. Der größte Unterschied zwischen Java und C++ ist meiner Meinung nach, dass in Java Objekte immer indirekt "erreicht" werden (Variablen eines Klassentyps sind in Wirklichkeit Referenzen) wobei in C++ eine "Variable" eines Klassentyps das Objekt selbst ist. Wenn Du also Objekte aus mehreren anderen Objekten zusammensetzt, können und sollten diese wirklich Teil des großen Objektes sein (falls möglich), statt dass Du nur Zeiger speicherst. Das hat viele Vorteile: Performanz, leichtere Verwaltung der Lebenszeit der Teilobjekte. Denn zu jedem "new" gehört ein entsprechendes "delete". Man kann natürlich nicht komplett auf new/delete verzichten. Aber versuchen solltest Du es.
Viel Spaß beim C++ proggen.
Gruß,
SP
-
Nur noch eine kleine Ergänzung:
hdi schrieb:
im Hinblick auf differenziertes Verhalten eines C++ Programms auf verschiedenen Rechnern? Hab schon mitbekommen dass zB Datentypen je nach System unterschiedlich viel Speicher belegen.. An solche Dinge denke ich als eingefleischter Javaianer gar nicht, ...
Das brauchst Du auch nicht. Man braucht nur in seeeeehr seltenen Grenzfällen die Größe eines Datentyps im Speicher - wenn man es doch zu brauchen meint, sollte man lieber nochmal gründlich darüber nachdenken und (hier) nachfragen.
Damit will ich natürlich wieder nicht sagen, dass man sie NIE bräuchte aber es ist eher eine krasse Ausnahme - erst Recht wenn man die (plattformunabhängigen!) Features wie sizeof(), std::numeric_limits, ... nutzt.Noch ein Tipp: Aufgrund des langen tiefen Bruderkriegs zwischen C++ist und Javaisten sind eine Menge falscher Statements/Pauschalisierungen im Umlauf, die einem im Weg stehen, wenn man "die andere" Sprache lernen will (Nicht vergessen - es geht so gut wie nie um ein "Umsteigen", sondern nur um das Erlernen einer neuen/zusätzlichen Sprache).
Es ist weder so, dass man in C++ umständlichst mit dem Lötkolben im Rechner rumfuhrwerkt noch dass man in Java mit jedem Programm nur eine ergebnisfreie CPU-Heizung betreibt.
Gruß,
Simon2.