c++ vs. C#



  • Hallo,
    ich habe bisher nur in C++ gearbeitet, und wollte heute ein Buch mit Bezug auf VS2005 dazu kaufen.
    Der Verkäufer teilte mit mit das es nur noch C# Bücher gäbe !
    Wo ist der Unterschied?
    Der Code im Buch sah ähnlich/gleich aus wie der von C++ .
    Ist eine Sprache neuer oder älter?
    Wieviel Aufwand ist es von C++ -> C# zu kommen?



  • C# ist eine neuere Sprache. Vorteile, Nachteile und Unterschiede solltest Du genug über die Suchfunktion finden. Da gab es schon einige Threads dazu.



  • Originalhanno schrieb:

    Der Verkäufer teilte mit mit das es nur noch C# Bücher gäbe !

    LOL? 😮 😕

    @Originalhanno:
    Wenn du von C++ kommst solltest du vielleicht zuerst einen Blick auf C++/CLI werfen, da kannst du deinen alten Code ohne Änderung übernehmen und .Net trotzdem nutzen. Leider gibt es dazu noch praktisch keine Bücher, da C++/CLI die neuste Sprache ist. Allerdings spielt die Sprache bei .Net nur noch eine untergeordnete Rolle, da du dich beim Einarbeiten mehr auf das Framework als auf die Sprache selbst konzentrieren musst. C# als Sprache ist schnell gelernt: Ich würde sogar behaupten, man könne das an einem Wochenende reindrücken und sofort einige schöne Programme schreiben, sofern man das Framework einigermassen kennt, da dieses in allen Sprachen gleich benutzt wird. Was ich sagen will: Diese Bücher verwenden alle C# als Sprache, um den Umgang mit .Net zu beschreiben. Du kannst aber auch mit einem Visual Basic.Net Buch lernen, wie die Threadprogrammierung in C# funktioniert und umgekehrt. Es ist immer dasselbe.

    // VB.Net
    Dim Foo as System.String
    // C#
    System.String Foo;
    // C++/CLI
    System::String Foo;
    

    C++/CLI tanzt vielleicht ein wenig aus der Reihe, da es neben .Net auch noch die "alte" Programmierung unterstützt.

    #include <iostream>
    int main()
    {
        Console::Write(L"Hallo");
        std::wcout << L"WElt";
    }
    

    edit: das forum lagt mal wieder extremst 😞



  • Originalhanno schrieb:

    Hallo,
    Der Verkäufer teilte mit mit das es nur noch C# Bücher gäbe !

    Äh? Ansonst hat der keine anderen Probleme? Es gibt massig neue C++ Bücher auf dem Markt. Selbst zu VC++ 2005 gibts wieder welche.



  • Hallo,
    danke für die Antworten.
    Leider gab es Widersprechungen welche Sprache nun neuer ist...

    @Artchi:
    Bei welchem Verlag sind die denn erschienen?
    Gib mir doch bitte ein paar Daten, wenn Du hast, dann könnte ich mein Buch umtauschen...

    LG
    Michael



  • originalhanno schrieb:

    Leider gab es Widersprechungen welche Sprache nun neuer ist...

    C++: letzter standard 1998
    C#: gestern 😕 :p

    C# ist "neuer", aber neuer bedeutet nicht gleich besser!

    bleib bei c++, aber kauf dir kein c++ spezifisches buch zu VC++ 2005
    es gibt soviele gute bücher zu c++; die meisten die nix taugen bauen aufm visual studio auf 👎



  • Hier nur eine Auswahl von aktuellen Neuerscheinungen zu VisualC++ 2005:

    http://www.amazon.de/exec/obidos/ASIN/3540238697/ref=br_bh_nr_2/028-6515686-2671720
    http://www.amazon.de/exec/obidos/ASIN/3935042884/qid=1144794218/sr=1-1/ref=sr_1_10_1/028-6515686-2671720

    Ich sage nicht das die alle gut sind, aber es widerlegt, das es angeblich keine neuen C++ Bücher gibt.

    Es gibt aber auch noch allgemeine C++ Bücher die neu erscheinen:
    http://www.amazon.de/exec/obidos/ASIN/3897214474/ref=br_bh_nr_3/028-6515686-2671720
    http://www.amazon.de/exec/obidos/ASIN/3827241065/ref=br_bh_nr_5/028-6515686-2671720

    Das ist nur eine Auswahl! Es gibt noch mehr, von den Neuauflagen ganz zu schweigen.



  • immigrant schrieb:

    bleib bei c++, aber kauf dir kein c++ spezifisches buch zu VC++ 2005
    es gibt soviele gute bücher zu c++; die meisten die nix taugen bauen aufm visual studio auf 👎

    Er kann schon C++, wenn ich es richtig verstanden habe. Er sucht jetzt eines, das sich speziell mit VisualC++ 2005 beschäftigt. Was soll er also mit einem allgemeinen C++ Buch?



  • Ich schieb euch mal ein paar Etagen weiter runter, hat ja nicht (mehr) direkt was mit C# zu tun 😉



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich halte es für keine gute Idee C# zu lernen, weil der Verkäufer einem C# Bücher verkaufen will. Zur Zeit gibt es wohl am Büchermarkt eine große C# und .NET Blase. Also hol dir lieber gezielt Bücher. Für C++ kann ich dir definitiv Effective C++ und Exceptional C++ empfehlen. Der Stroustroup lohnt sich, auch wenn oft von ihm abgeraten wird.

    Pass lieber auf, wenn du dir ein Buch mit "Visual C++" im Titel kaufst! Oft sind das ziemlich schwache Bücher, die einem einen kurzen Blick in die IDE geben und dann noch ein wenig MFC erklären. Wobei sich letzteres eh nicht mehr lohnen dürfte.

    @immigrant
    nö, der aktuelle C++ Standard ist von 2003 und der TR1 vom Juni 2005 :p



  • kingruedi schrieb:

    @immigrant
    nö, der aktuelle C++ Standard ist von 2003 und der TR1 vom Juni 2005 :p

    ja ok 2003 gabs ne kleinere revision.

    tr1 gehört aber erst seit neuestem zum kommenden standard:

    Amins Blog schrieb:

    Bis auf spezielle Funktionen wurde der gesamte TR1 (Technical Report 1) in den nächsten C++ Standard offiziell aufgenommen.
    ---Montag, 10. April 2006



  • mmh, ich sehe keinen vorteil von C# ueber c/c++ fuer mich. Ich nutzte .NET Mit C++ beruflich und finde das am flexibelsten.

    C# is neuer - ja, aber beinhaltet nix wirklich neues. .Net kann man mit vielen sprachen nutzten.

    C# is aber nicht kompatibel mit C++, auch wenn es sehr aehnlich ist.
    Es iat auch nicht als nachfolger oder weiterentwicklung von C++ zu verstehen.
    So wie ich das erlebt habe, war es der versuch von microsoft auf den JAVA zug aufzuspringen.



  • Und auch aus der "managed world" aus gesehen ist C++ (bzw. C++/CLI) die beste Sprache:
    http://msdn.microsoft.com/library/en-us/dnvs05/html/VS05Cplus.asp



  • Flow_cplus schrieb:

    C# is aber nicht kompatibel mit C++, auch wenn es sehr aehnlich ist.
    Es iat auch nicht als nachfolger oder weiterentwicklung von C++ zu verstehen.
    So wie ich das erlebt habe, war es der versuch von microsoft auf den JAVA zug aufzuspringen.

    Das kann ich voll bestätigen. C# ist Microsofts Antwort auf das Java von Sun. C# hat sehr viele Gemeinsamkeiten mit Java insbesondere da, wo sich Java stark von C++ abhebt. Das C im Namen von C# hat mit C/C++ weniger zu tun als das Basic in Visual Basic.

    Ich möchte auch nicht die eine oder andere Spraceh als besser oder schlechter bezeichnen. Dazu sind C# und C++ zu verschieden. Wenn schon vergleichen dann C# und Java, aber da bin ich kein Experte.

    Die mir bekannten Unterschiede sind:

    C++ hat Templates (generische Programmierung); C#/Java faktisch nicht
    C#/Java haben eine sehr große 'eingebaute' Systembibliothek; C++ nicht - alle Bibliotheken sind in C++ geschrieben.
    in C++ ist RAII möglich; d.h. ein garantierter Destruktor-Aufruf am Ende des Scopes; in C#/Java geht das nicht oder nur bedingt.
    Deshalb haben C#/Java eine Garbage-Collection; In C++ braucht man das nicht - vorausgesetzt man beherzt das RAII.
    C#/Java bringen eine standardisierte Laufzeit-Umgebung mit; C++ nicht

    Gruß
    Werner



  • Werner Salomon schrieb:

    C++ hat Templates (generische Programmierung); C#/Java faktisch nicht

    Naja... ab C# 2.0 (also .NET 2.0 bzw. VS2005) kann C# auch generics. Sind zwar nicht 100% mit C++-Templates vergleichbar aber sollten für die meisten Fälle ausreichend sein.



  • @immigrant und @kingruedi!
    Habt beide Recht. 😉 Bis vor ein paar Tagen dachte ich auch, das TR1 eine Erweiterung zum aktuellen Standard ist (auch wenn ich wusste, das es noch nicht offiziell abgesegnet ist, sondern nur ein Draft).

    Gut, letzte Woche wurde TR1 offiziell in den nächsten Standard gewählt. ABER:

    1. TR1 benutzt nur Sprach-Features zum aktuellen Standard.
    2. Einige Compiler haben oder werden demnächst TR1 schon ausliefern (MS will das wohl auch mit dem nächsten VS2007 machen).

    Also, offiziell ist es erst im nächsten Standard drin, aber hey, JETZT kann man es schon bedenkenlos benutzen. 😃



  • @Jochen! Java 5 hat auch schon Generics. Aber um ehrlich zu sein: die heißen nicht umsonst Generics und nicht Templates. Generics sind in Java (und vielleicht auch C#???) reine Cast-Krücken. Das Kompilat am Ende ist ein Cast.

    Generics sind Meilenweit von Templates entfernt...



  • @Artchi: Naja, mit Java kenn ich mich nicht so aus... aber in C# sind Generic wirkliche Generics und können auch fast alles was Templates können. C# kann es auch erst mit der Version 2.0, da auch erst mit .NET 2.0 diese Generics von der CLR native unterstützt werden. Somit sind es keine Casts, sondern tief verwurzelt in der Runtime.
    Aber Templates sind natürlich flexibler und mächtiger:
    http://msdn2.microsoft.com/c6cyy67b



  • Jochen Kalmbach schrieb:

    Und auch aus der "managed world" aus gesehen ist C++ (bzw. C++/CLI) die beste Sprache:
    http://msdn.microsoft.com/library/en-us/dnvs05/html/VS05Cplus.asp

    Nein, die "mächtigste". Aber das war C++ ja immer schon. 😉

    Werner Salomon schrieb:

    C# hat sehr viele Gemeinsamkeiten mit Java insbesondere da, wo sich Java stark von C++ abhebt.

    Richtig. Man hat das Übersetzungsmodell von Java genommen, die JIT-Compilierung, die garbage collection... aber das sind alles Konzepte die selbst mit Java schon nicht neu waren. Welchen Sinn hätte es auch gehabt, beim Design einer neuen Sprache beispielsweise das Übersetzungsmodell von C++ zu nehmen? Dinge wie Mehrfachvererbung kann ja ohnehin fast keine Sprache. Natürlich sind sich C# und Java ähnlicher als C# und C++ - aber C++ hat ein paar Dinge, die es zu keiner Sprache sehr ähnlich machen.

    in C++ ist RAII möglich; d.h. ein garantierter Destruktor-Aufruf am Ende des Scopes; in C#/Java geht das nicht oder nur bedingt. Deshalb haben C#/Java eine Garbage-Collection;

    Das geht ganz genauso - nur nicht implizit sondern man muss hinschreiben "am Ende des Scopes bitte das hier machen". Das hört sich erstmal nach einem Nachteil an, es zeigt sich aber, dass es für Sprachen mit GC viel angemessener ist. 90% des Destruktor-rumgefrickel in C++ betrifft die Resource Speicher und wenn man das Problem schon mal nicht mehr hat, dann kann man für die restlichen 10% ein weniger automatisches, aber genauso zuverlässiges System wählen, dass es erlaubt, beliebigen Code am Ende eines Scopes auszuführen. Das Java oder C# sowas nicht hätte, ist einfach nur ein Misverständnis.

    Artchi schrieb:

    Java 5 hat auch schon Generics. Aber um ehrlich zu sein: die heißen nicht umsonst Generics und nicht Templates. Generics sind in Java (und vielleicht auch C#???) reine Cast-Krücken. Das Kompilat am Ende ist ein Cast.

    Warum Generics in Java durch Casts realisiert wurden, ist allgemein bekannt. In C# wird nichts gecastet. Die Generics werden zur Laufzeit instanziert wie Templates zur compile-Zeit. Wenn du ne List<int> erstellst, wird der JIT-Compiler die generische Klassendefinition ansehen und die int-Version einer Liste erzeugen. Also ist der Unterschied zu Templates aus technischer Sicht gar nicht so riesig.

    Jetzt möchte ich aber gerne mal wissen, wie du folgende Punkte realisierst, wenn du statt Krücken-Generics Templates zur Verfügung hast.

    • Du brauchst eine List<T>, der Typ T wird aber erst zur Laufzeit bekannt.
    • Du lieferst eine Collection-Bibliothek aus, den Sourcecode würdest du aber nicht so gerne Herausgeben.
    • Du möchtest gerne spezifizieren, was der Typ T können muss, um in deine tolle Datenstruktur reinzukönnen. Du brauchst einen Standardkonstruktor und ein paar Methoden mit einer bestimmten Signatur. Was ist besser:
      (a)
    class MyCollection<T> where T: InterfaceName, new() {
    }
    

    (b) Es in die Krücken-Doku zu schreiben

    • Du willst dem Compiler beibringen, anständige Fehlermeldungen zu generieren.

    [differenzierte Aussage]Templates sind reine Makro-Krücken.[/differenzierte Aussage]


Anmelden zum Antworten