Von Java zu C++



  • Hallo !

    Wie der Titel schon sagt komme ich von Java und würde gerne C++ lernen.
    Hab mir zwar schon ein par Online Tutorials angesehen, aber ich finde aus einem (richtigen) Buch lernt man leichter als aus Online-Büchern. Welches Buch würdet ihr mir denn für C++ empfehlen ?

    Was mich zur Zeit am meisten verwirrt ist die Headerdatei, der Namensraum und vor allem die API. Von Java bin ich es gewohnt das man eine schöne große API hat, wo man eigentlich alles findet was man braucht, bei C++ gibts sowas nicht oder ??? (Außer die vorgefertigten libraries). Woher nimmt man dann aber die Informationen welche Klasse welche Methoden anbietet. Muss man sich das bei C++ alles selbst schreiben ?? (Ich meine aber die eher einfachen Klassen wie BufferedReader/Scanner bzw Listen etc.)

    Falls jemand Tipps hat was man beim Umstieg von Java auf C++ besonders beachten sollte, würd ich mich freuen 🙂

    Danke :xmas1:

    MfG Christian



  • Chris86 schrieb:

    Muss man sich das bei C++ alles selbst schreiben ?? (Ich meine aber die eher einfachen Klassen wie BufferedReader/Scanner bzw Listen etc.)

    für c++ gibt's die STL. die ist aber ziemlich rudimentär. echte C++ fans schwören auf 'boost'.
    🙂



  • Wenn man eine externe lib. verwenden will, muss man die dann nur in den Ordner "include" der jeweiligen IDE einfügen? Bei Java ist es so, das man den Path in der Umgebungsvariable setzen muss. Dort sucht dann Java nach den importierten Klassen, bei c++ muss man das nicht machen oder ?

    Danke



  • Du musst die lib linken und die Header inkludieren. Normalerweise fügt man in den IDE-Optionen die jeweiligen Pfade hinzu, dann braucht man nicht alles in einen Ordner kopieren.





  • Hab jetzt die Boost lib hinzugefügt, und funktioniert auch wenn ich es über die IDE ausführe (Dev-C++) aber wenn ich nur mit Konsole arbeite, findet er die lib nicht.

    Danke für den Buchtipp, werd mir das Buch bestellen, aber es gibt schon eine neuere Auflage (3.).

    Danke für die Hilfe 🙂



  • Chris86 schrieb:

    ...vor allem die API. Von Java bin ich es gewohnt das man eine schöne große API hat, wo man eigentlich alles findet was man braucht, bei C++ gibts sowas nicht oder ??? (Außer die vorgefertigten libraries). ...

    Bei Java sind's doch auch "nur die vorgefertigten Libraries" ... 😕
    Ganz entscheidend (und ich glaube, die höchste Hürde) ist, dass die "Denke" in C++ eine grundlegend andere ist:
    1.) Während man z.B. in Java gewohnt ist, alles nur Erdenkliche in den Standard aufzunehmen, gilt in C++ eine Art "Minimalitätsprinzip". Ist eine Philosophiefrage, über die man immer wieder stolpert (in beide Richtungen ... bei mir ist's eben die Richtung C++->Java).

    2.) Vielleicht noch ein weiterer Fallstrick sind die semantischen Unterschiede von "Referenz" (bezeichnet in Java etwas seeeehr anderes als in C++), "(Stack)Objekt" (gibt's so in Java eigentlich nicht ... am Ehesten noch bei integer&Co), "Call-by-reference/value" und natürlich "Scope".
    Das sind so Konzepte, wo recht ähnliche Bezeichnungen sehr unterschiedliche Konzepte verschleiern - so dass man gerne unbemerkt darüber stolpert.

    3.) "Überlasse möglichst alles dem Compiler" ist typische C++-Denke. Das führt zu "const", einem statischen Typsystem, typsicheren Containern, templates, ....
    Eine für Javaisten typische Aussage wie "Na und ? Dann fliegt eben zur Laufzeit eine Nullpointerexception ..." wird kaum ein C++er über die Lippen bekommen.

    Chris86 schrieb:

    ...Woher nimmt man dann aber die Informationen welche Klasse welche Methoden anbietet. ...

    Gar nicht ! 😃
    Ist ein typisches Beispiel für die o.g. Prinzipien 1.)&3.): "Reflection" braucht man so gut wie nie wirklich ... und deswegen gibt's das in C++ auch nicht. Und außerdem will man in C++ lieber schon zur Compilezeit sicherstellen, dass ein Typ "passt" ... weswegen man Polymorphie verwendet: virtual functions für die Lauf- und templates für die Compilezeitentscheidungen.
    (Aber wenn es Dir um die "Entwicklungszeit" geht, kann das einen moderne IDE für C++ genauso wie für Java)

    Ansonsten sind "includes" nichts Anderes als "imports" ... arbeiten nur auf rudimentärere Weise, können deswegen mehr (weil es einen Präprozessor gibt), sind aber auch fehleranfälliger.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Bei Java sind's doch auch "nur die vorgefertigten Libraries" ...

    Ja das stimmt schon, aber in C++ ist die Standard Lib. doch nicht so groß und vielfältig oder ? Und zum Lesen find ich die Java API einacher zu Verstehen, aber das liegt glaub ich daran das ich C++ noch nicht richtig verstehe ^^. Punkt 2 ist mir auch schon aufgefallen

    Simon2 schrieb:

    Aber wenn es Dir um die "Entwicklungszeit" geht, kann das einen moderne IDE für C genauso wie für Java)

    Ich verwende am Anfang lieber eine einfache IDE die einem nicht hilft (z.b durch vervollständigung usw.) denn ich will C verstehen lernen, und ich find das geht am einfachsten wenn man viele Fehler macht. Was auch ganz neu für mich ist sind Pointer. (Kann leider überhaupt keine andere Sprache außer Java :/). Danke für die Tipps 🙂 werd ich mir zu Herzen nehmen 🙂



  • Simon2 schrieb:

    Ganz entscheidend (und ich glaube, die höchste Hürde) ist, dass die "Denke" in C++ eine grundlegend andere ist:

    seltsamerweise, obwohl ich viel in C (ohne ++) programmiere, erscheint mir die C++ 'denke' sehr exotisch, wobei ich mit der Java-'denke' eher keine schwierigkeiten habe.
    🙂



  • C != C++

    Bjarne Stroustrup 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). When used by programmers, it typically indicates a "C++ is C with a few useful and a lot of useless complicated features added" attitude. Often, that is the point of view of people who like to write their own strings and hash tables with little knowledge of the standard library beyond printf and memcpy. There are people who stick to a restricted subset of C++ for perfectly good reasons, but they (as far as I have noticed) are not the people who say "C/C++".



  • Pigeon schrieb:

    http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1009

    jo, war/ist auch mein erstes buch.
    Aber warum nicht gleich die 3. Auflage

    mfg



  • Dev-C++

    Da gibt es inzwischen einen Nachfolger:
    http://www.codeblocks.org/

    Du solltest Dir auch C# anschauen, wenn Du die Java-Prinzipien bevorzugst.



  • Danke für den Link, lad mir die IDE gerade runter :).
    An C# hab ich anfangs auch gedacht, da die Syntax doch sehr stark an Java erinnert (was ich bis jetzt gesehen habe). Aber ich glaube wenn man mal C++ kann dann ist C# auch nicht mehr so ein großes Problem. Der Nachteil an C# ist doch das es eigentlich für Microsoft's Windows ausgelegt ist oder ?

    Anschaun werd ich mir die Sprache auf jedenfall, find sie auch sehr interessant, aber zuerst mal C++ Grundlagen aneignen :).

    Eine Frage noch, was denkt ihr wie Zukunftssicher ist C++, bzw. welche andere Sprache 'könnte' C++ gefährden?? (Ich weiß auf diese Frage gibt es keine konkrete Antwort, aber mich würden nur eure Meinungen interessieren).



  • C# hat nichts mit MS-Windows zu tun. C# != .NET
    C# ist eine Hi-Level Programmiersprache, wie Java. Mit dem UNterschied, das C# ECMA- und ISO-normiert ist.Ich kann z.B. hier bei mir C#-Programme unter FreeBSD laufen lassen. (bzw. geht auch unter Linux)

    http://www.go-mono.com

    Gefahr für C++? Bitte nicht schon wieder einen C++ vs. "Rest der Welt" Thread!!! Den haben wir regelmäßig im "Rund um die Programmierung"-Unterforum. Du bist nicht der erste und einzige der sich die Frage stellt.



  • Artchi schrieb:

    Gefahr für C++? Bitte nicht schon wieder einen C++ vs. "Rest der Welt" Thread!!! Den haben wir regelmäßig im "Rund um die Programmierung"-Unterforum. Du bist nicht der erste und einzige der sich die Frage stellt.

    Tut mir leid, wußte nicht das es solche Threads schon gibt, wollte keine C++ vs irgendwas Diskussion anfangen!



  • EDIT: <Hier stand quatsch>



  • Vielen dank für die lange Erklärung!

    Ich war nur etwas unsicher weil ich im Internet das hier gelesen habe

    C, C++ und COBOL:
    Reduziert zukunftssicher sind aufgrund ihrer Verbreitung C und C++ zu bewerten. Andere Sprachen, wie COBOL sind eher als nicht zukunftssicher zu betrachten.

    Ich weiß das C++ eine sehr mächtige Sprache ist, deswegen will ich auch damit anfangen und nicht nur bei Java bleiben.



  • Simon2 schrieb:

    Eine für Javaisten typische Aussage wie "Na und ? Dann fliegt eben zur Laufzeit eine Nullpointerexception ..." wird kaum ein C++er über die Lippen bekommen.

    Eine Nullpointerexception ist sicher nie das Ziel eines guten Javaprogrammieres. Wenn du sowas hörst, könne das mehr daran liegen, dass es nicht so viele gute Javaprogrammierer gibt, weil die guten alle C++ programmieren 😉



  • Chris86 schrieb:

    ...Woher nimmt man dann aber die Informationen welche Klasse welche Methoden anbietet. ...

    Gar nicht ! 😃
    .."Reflection" braucht man so gut wie nie wirklich ..



  • Ich glaub er sucht eine Doku in der alles steht, sowie die Java API Doku
    -> MSDN hat viel



  • .. und deswegen gibt's das in C++ auch nicht.

    Wohl eher weil es von C kommt und man in beiden Sprachen keinen Overhead will.


Anmelden zum Antworten