Unterschiede zu C++ für Umsteiger von Java



  • ich hab noch'n paar nachteile von C++: :xmas2:

    * einfache datentypen sind in C++ variabel (länge, byte order usw.).
    * in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).
    * in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).



  • Simon2 schrieb:

    tntnet schrieb:

    ...Wenn ich eine JRE installiert habe, sind viele Standardaufgaben bereits installiert...

    Gilt genauso, wenn ich mir ein Visual Studio C++ installiere....

    Ja, eben! Deshalb gibt es ja für Windows so viel Software. Ich kaufe VC++ und habe nach der Installation eine KOMPLETTE Entwicklungsumgebung um ALLES machen zu können, was mit Windows nur denkbar ist. Egal ob Serverprogrammierung, COM/ActiveX, Spiele (DirectX) usw. Im Prinzip müssten nur die anderen (Linux usw.) die APIs von Windows nachbauen. Schon hätte man eine C++-Runtime im Komplettpaket die für mehr als ein System verfügbar ist. 😉

    Im ernst, am Ende ist es doch egal, ob ich Eclipse und eine JRE einzeln installiere, oder ob ich VC++ und Boost einzeln installiere. Das was hier diskuttiert wird, ist Haarspalterei.

    Und wenn ich bedenke, das Boost mittlerweile bei diversen Linux-Distributionen vorinstalliert ist (ja, kaum zu glauben!) ist dies sogar fortschrittlicher als Java. Denn Java durfte bis vor kurzen zu keinem Betriebssystem ausgeliefert werden. Die Boost-Binaries sind komischerweise schon auf diversen Linuxen vertreten.



  • Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.



  • CStoll schrieb:

    Simon2 schrieb:

    "Java ist ein Produkt mit einer C++-ähnlichen Konfigurationssprache" 😉
    (mit allen Stärken, die ein Produkt (gegenüber einer "Sprache") hat ... und allen Nachteilen)

    So würde ich das nicht ausdrücken. ...

    Naja, war auch "provokant überspitzt", um auszudrücken: Vieles, was als "Vorteil von Java" dargestellt wird, hat nichts mit der Sprache zu tun, sondern damit, dass sie an ein konkretes Produkt (und dessen Software) geknüpft ist ...

    Ist aber auch egal: Es geht dem Threadstarter ja gar nicht um die Frage "welche Sprache ist besser ?".

    Gruß,

    Simon2.



  • schorsch code schrieb:

    Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.

    😕 Was will uns der Schreiber hier mitteilen? 😕



  • Simon2 schrieb:

    Ist aber auch egal: Es geht dem Threadstarter ja gar nicht um die Frage "welche Sprache ist besser ?".

    Sobald die Worte Java und C++ irgendwie im selben Thread fallen, ist es schon fast Tradition, 'nen Java vs. C++ Thread draus zu machen... analog zu den Unix vs. Windows Threads... hach, Ideologien sind doch was schönes :xmas2:

    Artchi schrieb:

    Wenn ich z.B. gtkmm schlecht unter MSVC builden und nutzen kann, liegt die Schuld beim gtkmm-Team.

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-165460.html



  • net schrieb:

    ...

    1. einfache datentypen sind in C++ variabel (länge, byte order usw.).
    2. in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).
    3. in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).

    zu 1) stimmt, sehe ich auch so. Eine der "C-Leichen im Keller" von denen man sich hätte lösen müssen.
    zu 2) Dafür handelt man sich in Java sehr viel schneller die Probleme "läuft, tut aber nicht, was es soll", "krieg' ich nicht so hin, wie ich's brauche" und "hab' ich das nicht schon 1000mal programmiert ?" ein. Dass mächtigere Werkzeuge auch an den Nutzer höhere Anforderung stellen, ist nicht auf Programmiersprachen beschränkt.
    zu 3) 🤡 so, wie es ein Nachteil vom Mac ist, dass er keine rechte Maustaste hat.... 🙄

    Gruß,

    Simon2.



  • schorsch code schrieb:

    Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.

    Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!
    🙄

    Jungs, jetzt trasht doch nicht das (an sich sehr interessante) Thema zu, das da lautet:
    "Worauf muß ein Sprachumsteiger achten ?"

    Gruß,

    Simon2.



  • @simon:
    du hast jedenfalls gute und überzeugende pro-C++ argumente. das muss man dir lassen. solche threads wie diesen gibt's ja öfter hier, aber so gut wie du bekommt das kaum keiner hin (meiner meinung nach).



  • schorsch code schrieb:

    Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.

    Artchi schrieb:

    😕 Was will uns der Schreiber hier mitteilen? 😕

    Simon2 schrieb:

    Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!
    🙄

    Was ich eigentlich sagen wollte, ist dass ich bei C++ eben keine riesige Runtime vorraussetzen muss, sondern nicht mehr als nur die benötigten Libs dazu packen brauche.



  • net schrieb:

    @simon:
    du hast jedenfalls gute und überzeugende pro-C++ argumente. das muss man dir lassen. solche threads wie diesen gibt's ja öfter hier, aber so gut wie du bekommt das kaum keiner hin (meiner meinung nach).

    :xmas1: hoch, jetzt werd' ich aber ein wenig rot ... 😋

    Danke.

    Da wir hier in der Firma sowohl das eine wie das andere programmieren und einige seeeehr fähige Leute haben, bekommt man halt so einiges mit.

    Und (wie wahrscheinlich schon oft gesagt) ich bemühe mich, um ein möglichst objektives Bild der beiden Sprachen (was nicht einfach ist, wenn das eigene Herz bei C++ höher schlägt) ....
    Mich erinnern diese Auseinandersetzungen oft an "Bruderkriege", die umso heftiger und blutiger ausfallen, je ähnlicher sich die Brüder sind.
    (Wer schonmal Cobol oder C auf uralt Entwicklungsumgebung programmieren musste, weiß vermutlich, wovon ich rede). 🙂

    Gruß,

    Simon2.



  • schorsch code schrieb:

    schorsch code schrieb:

    Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.

    Artchi schrieb:

    😕 Was will uns der Schreiber hier mitteilen? 😕

    Simon2 schrieb:

    Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!
    🙄

    Was ich eigentlich sagen wollte, ist dass ich bei C++ eben keine riesige Runtime vorraussetzen muss, sondern nicht mehr als nur die benötigten Libs dazu packen brauche.

    Aha !!!
    Dann bitte ich vielmals um Entschuldigung - ich hatte das genau andersherum (miß-)verstanden.

    Gruß,

    Simon2.



  • net schrieb:

    ich hab noch'n paar nachteile von C++: :xmas2:

    * einfache datentypen sind in C++ variabel (länge, byte order usw.).

    Hat aber auch seine Vorteile: wenn ich auf einem 256 bit System entwickel, unterstützt mein Compiler höchstwahrscheinlich mit einem long die volle 256 bit Breite. Bei Java bin ich auf die eine SUN-Specifikation festgenagelt. Weiterhin kann ich in C++ durch ein einfaches typedef ebend mal für ein anderes System den Typ anpassen, ohne ein Refactoring durchführen zu müssen. Der eine "Mangel" wird notgedrungen ein positiver Nebeneffekt.

    net schrieb:

    * in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).

    Ja, ist manchmal nervig. Habe aber schon öffters in diversen JRE-Versionen nicht das Verhalten gehabt, welches mir laut SUN-Spec versprochen wurde. ➡ Bug!

    net schrieb:

    * in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).

    Hier habe ich eine Wissenslücke: Was ist der '>>>" Operator? (ernste Frage!)



  • Artchi schrieb:

    Hier habe ich eine Wissenslücke: Was ist der '>>>" Operator? (ernste Frage!)

    right-shift unter missachtung des vorzeichens (schiebt auch bei negativen zahlen nullen rein).



  • Artchi schrieb:

    net schrieb:

    ich hab noch'n paar nachteile von C++: :xmas2:
    * einfache datentypen sind in C++ variabel (länge, byte order usw.).

    Hat aber auch seine Vorteile: wenn ich auf einem 256 bit System entwickel, unterstützt mein Compiler höchstwahrscheinlich mit einem long die volle 256 bit Breite.

    das kann man nicht unbedingt als vorteil sehen, wenn ein programm plötzlich 80% mehr speicher braucht der einfach nur brach liegt 😃



  • @Artchi&simon2
    Hallo nochmal ich, habe mich jetz ausgiebig mit dem verzicht auf zeiger beschäftigt,
    und noch ne frage, wollte nich gleich nochmal nen thread aufmachen:

    Kann es sein, daß ein Fall, bei dem man nicht darauf verzichten kann(auf zeiger), ist, wenn man rein abstrakte klassen verwendet?
    Oder gibts da auch noch tricks?
    Ansonsten nochmal danke für die hinweise, man kommt echt fast vollkommen ohne aus, so ist das viel schöner.
    Dummerweise hatte ich halt anfangs meine eigenen container geschrieben und da gabs mit referenzen bissel probs(is mir noch nich ganz klar was genau), aber mit den stl containern läuft das super.
    cu



  • QarateKid schrieb:

    Kann es sein, daß ein Fall, bei dem man nicht darauf verzichten kann(auf zeiger), ist, wenn man rein abstrakte klassen verwendet?
    Oder gibts da auch noch tricks?

    Ja, für abstrakte Klassen benötigst du Zeiger (weil sie abstrakt sind, können sie schließlich nicht direkt erzeugt werden). Möglicherweise kann man da auch über Referenzen vorgehen, aber ob das praktikabel ist, ist die andere Frage.

    (und generell im Zusammenhang mit Polymorphie sind Zeiger recht hilfreich)



  • QarateKid schrieb:

    @Artchi&simon2
    ...Kann es sein, daß ein Fall, bei dem man nicht darauf verzichten kann(auf zeiger), ist, wenn man rein abstrakte klassen verwendet?...

    Wieso ?
    Es gibt doch Referenzen:

    class A {
       public:
          virtual void f() const  = 0;
          virtual ~A() {}
    };
    
    class B : public A {
       int i;
       public:
          B(int li) : i(li) {}
          void f() const { cout << "B::f: " << i << "\n"; }
    };
    
    class C : public A {
       string s;
       public:
          C(string ls) : s(ls) {}
          void f() const { cout << "C::f: " << s << "\n"; }
    };
    
    void f(A const & a) {
       cout << "f():";
       a.f();
    }
    
    int main() {
       B b(1);
       C c("Simon2");
    
       A& refB = b;
       A& refC = c;
    
       refB.f();
       refC.f();
    
       f(refB);
       f(refC);
       return 0;
    }
    

    Aber natürlich kannst Du NICHT

    A a = B(i); // Fehler: A ist nicht instantiierbar
    

    o.ä. machen.
    Beim CallByValue und ReturnByValue wird's natürlich "kribbelig" ... da musst Du evtl. doch manchmal auf Heap-Objekte ausweichen - aber Vieles kann man mit Referenzen (auf Stackobjekte) machen.

    Gruß,

    Simon2.



  • Also Zeiger brauchst du dann, wenn du sowas machen willst (wenn ich mal Simon2s Klassen benutze):

    A *a = new B();
    

    Weil das geht ja nicht:

    A a;  // A kann man nicht erzeugen
    

    Ansonsten nochmal danke für die hinweise, man kommt echt fast vollkommen ohne aus, so ist das viel schöner.
    Dummerweise hatte ich halt anfangs meine eigenen container geschrieben und da gabs mit referenzen bissel probs(is mir noch nich ganz klar was genau), aber mit den stl containern läuft das super.
    cu

    Aber du machst doch nicht sowas:

    std::vector<A&> a_vec;
    

    Referenzen im Container ist ganz schlecht.



  • Artchi schrieb:

    Also Zeiger brauchst du dann, wenn du sowas machen willst (wenn ich mal Simon2s Klassen benutze):

    A *a = new B();
    

    Weil das geht ja nicht:

    A a;  // A kann man nicht erzeugen
    

    so gibt's 'nen pointer nur temporär 😉

    A& a = *(new B(1));
       ...
       a.f(); // c++ ist lustig: zugriff ohne pointer
    

Anmelden zum Antworten