Unterschied c c++ c#



  • OOP Guy, ich hätte noch ein Beispiel. Ein Konstruktor, der dynamisch Speicher anfordert. Im Folgenden siehst du meinen Code, bei dem die Konstruktoren von A , B , C und folglich foo Exceptions werfen dürfen. Aufgabe: Implementiere den äquivalenten Code ohne RAII und Exceptions. Die Klassen A , B und C haben jeweils eine Methode bool valid() const , welche angibt, ob die Konstruktion erfolgreich war. Aber abgesehen vom Flag sollte möglichst nichts an der Semantik geändert werden.

    class foo
    {
        public:
            foo() : a(new A), b(new B), c(new C)
            {
            }
    
        private:
            scoped_ptr<A> a;
            scoped_ptr<B> b;
            scoped_ptr<C> c;
    };
    


  • DEvent schrieb:

    Ich habe C++ vielleicht an die 4 oder 6 Jahre programmiert.

    Das ist sehr schwer zu glauben, wenn man solchen "C++"-Code wie auf Seite 6 sieht. Dazu kommen deine unqualifizierten Trollposts. Waren wohl nicht besonders intensive C++-Jahre.



  • OOP Guy schrieb:

    Das wieder mal typisch. Es werden Beispiele gebracht ohne alternativen zu zeigen. Dein Argument kann ich so nicht gelten lassen.

    Genau darauf habe ich gewartet. Das bringt uns zu einem interessanten Problem. Ich nehme mal den die haeufigst verwendete Variante als Beispiel:

    // Erklärt sich von selbst
    int foo(int a, int b) {
      int err;
      int x = fun1(a,2*b, &err);
      int y = fun2(2*b,a, &err);
      int z = fun3(a-b, &err);
      return err ? err : x+y+z;
    }
    

    Das tolle dabei ist, du hast nachher keine Ahnung mehr warum es fehlgeschlagen ist.

    Denn wenn fun1 fehlschlaegt und fun2 auch nur irgendwie von fun1 abhaengig ist, hast du dir mit dem fehlschlagen von fun2 den errno von fun1 ueberschrieben.

    Weil du bei einem Fehler nicht abbrichst (und genau das musst du aber tun). Wenn ein Fehler auftritt darfst du nicht weiter Code ausfuehren. Aber das ist ja ein riesen Problem des if-then-else Errorhandlings.

    Lies dir mal meinen 2 Artikel ueber Exceptionhandling durch, dir fehlen alle Grundlagen zur Fehlerbehandlung... if-then-else ist intrusive. Per Definition. Exception sind es nicht. Das ist ein enormer Unterschied. Die Denkweise ist eine andere...

    @DEvent:
    Beim lernen geht es um Denkmuster. Die musst du in C++ genauso lernen wie in Python, Ruby und Java. In C++ schreien die Leute halt wenn man C programmiert. In Java ist der Aufschrei nicht so laut, ich glaube man hat einfach gelernt damit zu leben... Fuer Ruby musst du sowieso viele andere Denkweisen lernen und python verhindert ganz gut dass man C code schreiben kann.

    Dennoch muss man Denkweisen lernen. C++ hat es hier am schwersten, da alles wie C aussieht, aber nicht C ist. Deshalb ist das Problem des C codes in C++ am schlimmsten. Java denke ich hat es aber am 2. schlimmsten erwischt. Aber durch das ewige alles in Klassen packen, kann man C Code etwas leichter abwuergen. Nur C++ erlaubt einem halt alles. Deshalb ist das Problem hier (wie du ja an dir selbst und OOP Guy schoen erkennen kannst) am groessten. Denn C code ist legaler C++ code...

    zB auf die idee strings als char* zu betrachten. auf so eine idee zu kommen. ne ne ne. Da nimmst du ne Klasse dafuer. ein nocopy string der 2 zeiger auf begin und end der Zeichenkette hat. Wunderbar.

    algorithmen sind eh von datenstrukturen abgekoppelt, deshalb ist es auch egal ob du CString oder std::string verwendest, der Code ist eh identisch...



  • Shade Of Mine schrieb:

    Nur C++ erlaubt einem halt alles.

    C++ ist eine der restriktivsten Sprachen überhaupt - eine Waage zum Abwiegen der Sprachdokumentation und Syntaxdiagramme dürfte reichen, um sich davon zu überzeugen. Es gibt objektorientierte Sprachen, deren Syntaxdiagramme auf ein halbes Faltblatt passen: weniger Regeln heißt mehr Freiheit.

    Shade Of Mine schrieb:

    algorithmen sind eh von datenstrukturen abgekoppelt,

    Aua 🙂



  • 0xb.x.O51 schrieb:

    Es gibt objektorientierte Sprachen, deren Syntaxdiagramme auf ein halbes Faltblatt passen: weniger Regeln heißt mehr Freiheit.

    Das kann man so allgemein nicht sagen. Vegleiche Modula-II mit C++, vergleiche Brainfuck mit Lisp.

    0xb.x.O51 schrieb:

    Shade Of Mine schrieb:

    algorithmen sind eh von datenstrukturen abgekoppelt,

    Aua 🙂

    In der STL sind die recht stark entkoppelt.



  • volkard schrieb:

    0xb.x.O51 schrieb:

    Shade Of Mine schrieb:

    algorithmen sind eh von datenstrukturen abgekoppelt,

    Aua 🙂

    In der STL sind die recht stark entkoppelt.

    Da kannst du sogar fast eine map nach value sortieren. :p



  • volkard schrieb:

    Das kann man so allgemein nicht sagen. Vegleiche Modula-II mit C++, vergleiche Brainfuck mit Lisp.

    das sagt so allgemein auch niemand - oder sind BF, Mod. II und Lisp objektorientiert, gibt es da neue Forschungsergebnisse 😕



  • Unregistrierter schrieb:

    volkard schrieb:

    Das kann man so allgemein nicht sagen. Vegleiche Modula-II mit C++, vergleiche Brainfuck mit Lisp.

    das sagt so allgemein auch niemand - oder sind BF, Mod. II und Lisp objektorientiert, gibt es da neue Forschungsergebnisse 😕

    Also schränkst Du ein. Das ist schonmal ein Anfang.
    Trotzdem kann man das nicht so allgemein sagen.



  • 0xb.x.O51 schrieb:

    oder sind BF, Mod. II und Lisp objektorientiert, gibt es da neue Forschungsergebnisse 😕

    Lisp ist doch wohl _der_ Inbegriff einer Multiparadigmen-Programmiersprachenfamilie, also klar kann Lisp objektorientiert sein.
    Siehe zB. CLOS, das schon lange Teil von Common Lisp ist.



  • 0xb.x.O51 schrieb:

    das sagt so allgemein auch niemand - oder sind BF, Mod. II und Lisp objektorientiert, gibt es da neue Forschungsergebnisse 😕

    eigentor :p

    vielleicht sind syntaktische regeln doch nicht wirklich das richtige kriterium um die restriktivitaet einer sprache zu betrachten...



  • wer schränkt hier was ein?

    Ich rede von Anfang an von objektorientierten Sprachen. 'liberal' ist nicht gerade das erste Attribut, das mir bei C++ einfällt.



  • 0xb.x.O51 schrieb:

    wer schränkt hier was ein?
    Ich rede von Anfang an von objektorientierten Sprachen. 'liberal' ist nicht gerade das erste Attribut, das mir bei C++ einfällt.

    Aber wie Du "...Syntaxdiagramme auf ein halbes Faltblatt passen: weniger Regeln heißt mehr Freiheit" zusammenbaust, heißt das zuznächst allgemein: "Weniger Syntaxregeln heißt mehr Freiheit" und das ist schlichtweg Unfug. Mit Einschränkung ist es immernoch grober Unfug. Du kennst doch selber Sprachen, wo man alles in Klassen stecken muß oder keine Destruktoren bauen kann oder keine Templates kennt oder Zeiger nicht hat oder kein reinterpret_cast, also man diesbezüglich also weniger Freiheiten hat, wobei die Sprachen auch mit weniger Regeln auskommen.



  • 0xb.x.O51 schrieb:

    wer schränkt hier was ein?

    Ich rede von Anfang an von objektorientierten Sprachen. 'liberal' ist nicht gerade das erste Attribut, das mir bei C++ einfällt.

    Ich weiß nicht was du meinst, aber liberal ist C++ sehr wohl. Du hast const, nicht const, du hast 5 Möglichkeiten etwas zu casten, du hast struct und class, du hast Funktionspointer und Interface, du kannst alles mögliche als Ausnahme werfen und du kannst alle Ausnahmen wieder fangen, du kannst fast alle Operatoren überladen (Glanzleistung ist es den ,-Operator überladen zu können). Du hast Referenzen und Pointer, du kannst das const keyword fast überall hinsetzen (const void* const method(const A &a) const; es macht so viel Spass).

    C++ ist sehr liberal. Das einzige was ich in C++ vermisse ist ein Konzept. Aber ich werde sicher wieder verwiesen, min. 10 Bücher über C++ zu lesen, min. 5 von Stroustrup und der Rest mit Titel wie "Effektiv C++ oder Wie kann ich in diesem Durcheinander was finden". Oder man liest sich erst mal 22 Kapiteln durch, damit man C++ "Effektiv" im Unternehmen einsetzen kann http://www.doc.ic.ac.uk/lab/cplus/c++.rules/



  • DEvent schrieb:

    Das einzige was ich in C++ vermisse ist ein Konzept.

    Konzepte für C++ werden in Foren wie diesem erfunden.



  • DEvent schrieb:

    Das einzige was ich in C++ vermisse ist ein Konzept.

    Weil C++ dich nicht zwingt A zu machen. Du kannst auch B oder C machen.

    Wenn du natürlich strikte Begrenzungen willst ist Java natürlich besser. Wenn du aber Ideen zu Code führen willst ist C++ eine gute Wahl.



  • DEvent schrieb:

    Das einzige was ich in C++ vermisse ist ein Konzept.

    Das Konzept war eine objektorientierte Erweiterung für C zu machen, C mit Klassen. Und wie das so ist, wenn man immer nur dazu baut, es entsteht Wildwuchs



  • Shade Of Mine schrieb:

    Wenn du aber Ideen zu Code führen willst ist C++ eine gute Wahl.

    C++ ist schlimmste Discipline and Bondage Programmierung. Mit Python kannst du Ideen umsetzen.



  • DEvent schrieb:

    [...] Das einzige was ich in C++ vermisse ist ein Konzept.

    Aha.

    Realist_ schrieb:

    Konzepte für C++ werden in Foren wie diesem erfunden

    Heheh 🙂

    DEvent schrieb:

    Aber ich werde sicher wieder verwiesen, min. 10 Bücher über C++ zu lesen, min. 5 von Stroustrup und der Rest mit Titel wie "Effektiv C++ oder Wie kann ich in diesem Durcheinander was finden".

    Weißt Du, es ist viel schlauer auf ein Buch zu verweisen, als mit eigenen Worten das zu erklären, was in einem dieser Bücher steht. Selbst wenn sich jemand die Mühe machen würde, etwas hier zu erklären, wäre das wahrscheinlich pure Zeitverschwendung. Die meisten hier haben sich ja sowieso ihre Meinung schon (ein)gebildet. Zumindest ist erstmal das Misstrauen groß. Du hast beispielsweise ordentlich übertrieben, was mir sagt, dass Du an keiner ernsten Diskussion interessiert bist. Stroustrup hat 3 aktuelle Bücher: TC++PL, D&E und das neue für Anfänger. Dir davon mehr als zwei ans Herz zulegen, hätte sicherlich keiner gemacht. Es gibt natürlich auch einige Bücher von anderen Autoren. Aber prinzipiell brauchst Du nur ein "legality guide" (was kann/darf man machen, zB TC++PL) und ein "morality guide" (was sollte man machen, zB EffC++). Dann bist Du eigentlich schon gut ausgerüstet. Die Konzepte sind die Dinger, die typischerweise in guten Büchern erklärt werden und bei kostenlosen Web-Tutorien in der Regel auf der Strecke bleiben.



  • Shade Of Mine schrieb:

    Wenn du aber Ideen zu Code führen willst ist C++ eine gute Wahl.

    wenn ich ideen zu code führen will nehm ich eine sprache wie scala oder ruby ... 😮



  • auauauau12 schrieb:

    wenn ich ideen zu code führen will nehm ich eine sprache wie scala oder ruby ... 😮

    dann sind das wahrscheinlich ganz andere "Ideen" als die, die ein C buw C++ Programmierer hat. Schließe nicht von Dir auf andere.


Anmelden zum Antworten