C zu C++ - Einfacherer Übergang?



  • hahaha-ahahah schrieb:

    FreakY<3Cpp schrieb:

    Wer zuerst C lernt um dann C++ zu lernen ist mit Anlauf gegen einen Baum gerannt. C++ war die erste Sprache, die ich konsequent gelernt hatte und ich war sehr zufrieden damit. ...

    Du bekommst ja nicht mal nen 3.5-Zeiler richtig hin ohne gegen nen Baum zu rennen.
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1870594.html#1870594

    Was soll daran falsch sein ? 🙄



  • FreakY<3Cpp schrieb:

    hahaha-ahahah schrieb:

    FreakY<3Cpp schrieb:

    Wer zuerst C lernt um dann C++ zu lernen ist mit Anlauf gegen einen Baum gerannt. C++ war die erste Sprache, die ich konsequent gelernt hatte und ich war sehr zufrieden damit. ...

    Du bekommst ja nicht mal nen 3.5-Zeiler richtig hin ohne gegen nen Baum zu rennen.
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1870594.html#1870594

    Was soll daran falsch sein ? 🙄

    Kompiliert nicht.



  • Dann hast du entweder einen schlechten Compiler, oder du hast was vergessen, denn es geht...



  • Was soll daran falsch sein ? 🙄

    if(old_string[i] != ",") , die " " sind falsch. 🙄

    Ich hab auch mal in C reingeschnuppert, doch ich musste diese Sprache einfach auslachen, weil sie in meinen Augen primitiv ist.

    Lerne zwar auch momentan C++, ohne mich vorher mit C beschäftigt zu haben, aber diese Aussage ist schon ziemlich dämlich...



  • Achso den kleinen Beitrag meint er. Ja okay, da hab ich es wohl verwechselt 😃

    Lerne zwar auch momentan C++, ohne mich vorher mit C beschäftigt zu haben, aber diese Aussage ist schon ziemlich dämlich...

    Dann kannst du scheinbar auch so viel mitreden?
    Klar C kann was, wie man bei vielen Programmen gesehen hat, aber C++ ist C nur besser in meinen Augen, warum sollte ich mich also zurückbilden und was älteres und für mich schlechteres lernen. C++ ist nunmal besser strukturiert. Wer sich lieber mit C quälen will, kann das gerne tuen.
    Aber mittlerweile sag ich auch, dass ich C# besser als C++ finde. Es liegt immer im Auge des Betrachters.



  • Dann kannst du scheinbar auch so viel mitreden?

    Scheinbar kann ich objektiver beurteilen...
    Lachst du auch Assembler aus, weil das so unglaublich primitiv ist?
    Die meisten Sprachen haben ihre Daseinberechtigung, so auch C.

    warum sollte ich mich also zurückbilden und was älteres und für mich schlechteres lernen.

    Wenn jemand noch keine Programmiersprache kennt und dann C, statt C++ lernt, bildet er sich nicht zurück, sondern fort. Ich rede hier übrigens nicht von dir, sondern vom Threadstarter.

    Achso den kleinen Beitrag meint er. Ja okay, da hab ich es wohl verwechselt 😃

    Sicher...



  • C zu C++ - Einfacherer Übergang?

    Es ist kein Übergang. C++ ist eine ganz andere Programmiervorgehensweise mit anderen Vorstellungen.



  • FreakY<3Cpp schrieb:

    Klar C kann was, wie man bei vielen Programmen gesehen hat, aber C++ ist C nur besser in meinen Augen, warum sollte ich mich also zurückbilden und was älteres und für mich schlechteres lernen.

    Du kannst aber nicht so einfach Sprachen vergleichen, die völlig unterschiedliche Zielsetzungen haben und sich auf völlig unterschiedliche Paradigmen konzentrieren.

    C konzentriert sich auf prozeduale Programmierung und lässt High-Level-Features wie Garbage Collection, Exceptions, Polymorphie usw. bewusst weg. Was dabei rauskommt ist eine schöne, konsistente und einfache Sprache. Sprachen wie C# und Java abstrahieren von der Low-Level-Ebene von C und konzentrieren sich eher auf objektorientierte Programmierung, womit sie wieder halbwegs schöne und einfache Sprachen sind, aber mit ganz anderen Möglichenkeiten und Beschränkungen.

    C++ versucht, sehr viele Paradigmen zusammenzubringen. Wenn man tatsächlich all diese Paradigmen in einer Sprache braucht (also vor allem Sprachfeatures für OOP und gleichzeitig die Low-Level-Features von C, einschließlich Kompatibilität zu C selbst), ist das sicher nütztlich. Leider geht das nicht so problemlos, so dass es in C++ jede Menge unschöne Kompromisse und hässliche Workarounds gibt. Wenn man damit leben kann ok, aber trotzdem ist es sehr weit hergeholt, C++ pauschal als "besser als C" zu bezeichnen. Und vor allem dürfte klar sein, dass C++ um einiges schwieriger zu erlernen ist als C. Und mit Erlernen meine ich vollständiges Beherrschen, bei denen man wirklich alle Sprachfeatures und ihr zusammenwirken versteht.

    IMHO ist es das sinnvollste, erstmal C und eine High-Level-Srache wie Java zu lernen und sich dann (wenn man unbedingt will) an C++ heranzuwagen, bei dem man dann alles auf einmal hat. C vor C++ zu lernen ist sinnvoll, weil man das meiste von dem, was man bei C lernt, zwar bei C++ nicht jeden Tag direkt verwenden wird, aber trotzdem wissen muss, um nicht auf die Nase zu fallen. Dass man in C++ dann anders programmiert als in C steht außer Frage.

    C++ war nie dazu gedacht, von Leuten benutzt zu werden, die kein C können. 🙄



  • ... schrieb:

    Lachst du auch Assembler aus, weil das so unglaublich primitiv ist?

    Ich vermute mal du meinst die Assemblersprache, nicht den Assembler an sich selbst 😉 . Nein, die Assemblersprachen lache ich nicht aus, ich bewundere sie eher und die Leute, die sie beherrschen, denn damit kann man quasi alles machen.

    Zuerst C zu lernen, um dann C++ zu lernen, halte ich für schwachsinnig. Soll ich jetzt auch zuerst C++ lernen, um C# oder Java zulernen, weil C++ OOP ist?

    Mir ist das auch relativ, wer was zuerst lernt, ist nicht mein Bier. Wer sich z.B. mit CStrings rumboxen möchte, kann dies gerne tuen 🙂



  • Dravere schrieb:

    Grundsätzlich gibt es drei Programmiersprachen-Typen (würde ich jetzt mal behaupten):
    - Objektorientiert
    - Prozedural
    - Funktional

    Objektorientierung läuft (je nach dem, was man darunter versteht) ziemlich orthogonal zu den beiden anderen.
    🙂



  • mngbd schrieb:

    Dravere schrieb:

    - Objektorientiert
    - Prozedural
    - Funktional

    Objektorientierung läuft (je nach dem, was man darunter versteht) ziemlich orthogonal zu den beiden anderen.
    🙂

    Nicht wirklich. Klassen mit virtuellen Methoden sind im Grunde das Selbe wie Produkttypen und polymorphe Funktionen, die man bei der funktionalen Programmierung hat. OOP ist eigentlich nur eine in die Nähe von prozedualer Programmierung gerückte Low-Level-Sichtweise auf einen bestimmten Bestandteil funktionaler Programmierung.



  • namespace invader schrieb:

    Nicht wirklich. Klassen mit virtuellen Methoden sind im Grunde das Selbe wie Produkttypen und polymorphe Funktionen, die man bei der funktionalen Programmierung hat. OOP ist eigentlich nur eine in die Nähe von prozedualer Programmierung gerückte Low-Level-Sichtweise auf einen bestimmten Bestandteil funktionaler Programmierung.

    Blöd nur, dass alle die funktionalen Sprachen immer noch Typen von Objekten kennen, die sie unterscheiden.
    🙂



  • namespace invader schrieb:

    Nicht wirklich. Klassen mit virtuellen Methoden sind im Grunde das Selbe wie Produkttypen und polymorphe Funktionen, die man bei der funktionalen Programmierung hat. OOP ist eigentlich nur eine in die Nähe von prozedualer Programmierung gerückte Low-Level-Sichtweise auf einen bestimmten Bestandteil funktionaler Programmierung.

    Ich weiss nicht, was du damit meinst. Ist alles ziemlich schwammig.

    Blöd nur, dass alle die funktionalen Sprachen immer noch Typen von Objekten kennen, die sie unterscheiden.

    Bloed, dass das Konzept von Typen nichts mit Prozedural oder Funktional zu tun hat.



  • mngbd schrieb:

    Blöd nur, dass alle die funktionalen Sprachen immer noch Typen von Objekten kennen, die sie unterscheiden.
    🙂

    ich verstehe das problem nicht.



  • Shade Of Mine schrieb:

    ich verstehe das problem nicht.

    Ich auch nicht. Ich wollte ja nur sagen, dass eine prozedurale Sprache genauso objektorientiert sein kann wie eine funktionale; Typtheorie hin oder her. Und es ist mir auch egal, ob manche Sprachen eine Möglichkeit beherrschen, Objektorientierung selbst zu bauen.
    🙂



  • Ich meinte, dass das, was objektorientierte Programmierung ausmacht, nämlich virtuelle Methoden (und alles was damit zusammenhängt), in funktionalen Sprachen mir ordentlichem Typsystem schon implizip vorhanden sind. Deswegen "braucht" man zusätzliche OOP-Sprachfeatures bei funktionaler Programmierung nicht. Wenn es sie in funktionalen Sprachen doch gibt, sind sie mehr oder weniger nur Syntax, und kein großartiges neues Paradigma.

    Das hängt natürlich auch von den konkreten Sprachen ab über die man spricht und ich will mich deswegen auch nicht streiten. Aber ich würde eben OOP nicht als orthogonal zu funktionaler Programmierung sehen.



  • @namespace invader:
    warum nicht gleich so einen argumentativen und objektiven Beitrag wie den am Ende der 4. Seite? Haette uns den ganzen Flame erspart 😉

    namespace invader schrieb:

    C konzentriert sich auf prozeduale Programmierung und lässt High-Level-Features wie Garbage Collection, Exceptions, Polymorphie usw. bewusst weg. Was dabei rauskommt ist eine schöne, konsistente und einfache Sprache. Sprachen wie C# und Java abstrahieren von der Low-Level-Ebene von C und konzentrieren sich eher auf objektorientierte Programmierung, womit sie wieder halbwegs schöne und einfache Sprachen sind, aber mit ganz anderen Möglichenkeiten und Beschränkungen.

    C++ versucht, sehr viele Paradigmen zusammenzubringen. Wenn man tatsächlich all diese Paradigmen in einer Sprache braucht (also vor allem Sprachfeatures für OOP und gleichzeitig die Low-Level-Features von C, einschließlich Kompatibilität zu C selbst), ist das sicher nütztlich. Leider geht das nicht so problemlos, so dass es in C++ jede Menge unschöne Kompromisse und hässliche Workarounds gibt. Wenn man damit leben kann ok, aber trotzdem ist es sehr weit hergeholt, C++ pauschal als "besser als C" zu bezeichnen. Und vor allem dürfte klar sein, dass C++ um einiges schwieriger zu erlernen ist als C. Und mit Erlernen meine ich vollständiges Beherrschen, bei denen man wirklich alle Sprachfeatures und ihr zusammenwirken versteht.

    Reine Neugier: was waer denn ein Beispiel eines solchen Workarounds?

    Das schoene an C++ ist ja grad, dass du all die Features zur Auswahl hast, aber sie nicht benutzen musst. Ich schreibe oft und gern prozedurales C++ und wage zu behaupten dass das sehr wohl besser ist als reines C. Dank std::string wird das string-handling wesentlich vereinfacht, durch exceptions das Fehlerhandling und Templates sorgen manchmal fuer kompakteren Code. Einziger potentieller Nachteil: std::string oder Exceptions koennen die Laufzeit meines Programmes um 2% erhoehen, bei extrem viel string-handling vllt. sogar 20-50%, aber das sind Sonderfaelle.

    Zugegeben ist C++ 'ne ziemlich grosse Sprache fuer Anfaenger mit grossen Stolpersteinen. Einem Anfaenger wuerd ich auch zu mehr High-Level raten. Aber gerade wenn man Low-Level machen will und nicht durch die Umgebung auf C verwiesen ist, kann man mit C++ oft zur gleichen Performance lesbareren Code schreiben. IMHO. Man muss dann aber wissen was man tut, dazu muss man dann wohl auch den C-Teil von C++ verstehen.

    FreakY<3Cpp schrieb:

    Wenn C++ objektiv nicht schön ist, frag ich mich was C ist. C hat eigentlich nicht mal den Ansatz von Objektivität.

    Der Unterschied zwischen "objektiv schoen" und "schoen objekt-orientiert" ist dir klar? 😃



  • Blue-Tiger schrieb:

    Reine Neugier: was waer denn ein Beispiel eines solchen Workarounds?

    Na z.B. ist Exception Handling zusammen mit manueller Speicherverwaltung eine Blöde Idee, weil erzeugte Objekte nach einer Exception nicht freigegeben werden. In C++ sind daher Krücken wie RAII bzw. Smart Pointer notwendig.

    Ich verweise auch mal auf http://yosefk.com/c++fqa/defective.html

    Das schoene an C++ ist ja grad, dass du all die Features zur Auswahl hast, aber sie nicht benutzen musst. Ich schreibe oft und gern prozedurales C++ und wage zu behaupten dass das sehr wohl besser ist als reines C.

    Naja, das ist Ansichtssache. Ich würde es als schlechten Stil empfinden, wenn man zur Lösung eines Problems nicht die von der Sprache genau dafür gedachten Features verwendet und entsprechend dem Paradigma der Sprache programmiert, sondern sich nur bestimmte Features rauspickt und sich irgendwie anders durchmogelt. Vergleichbar wäre es, wenn man in C keine Schleifen verwendet, sondern stattdessen alles mit goto macht.

    Und C++ bietet jede Menge Features, die aber alle irgendwelche Probleme haben, so dass man gezwungen ist, auf andere Features auszuweichen, oder auf die Low-Level-Ebene von C. Und sowas empfinde ich nicht als schön.

    Ich will, dass eine Sprache sich auf ein bestimmtes Paradigma festlegt, und mir dazu passend einen gut durchdachten, konsistenten Satz von vielseitig verwendbare Features bietet, mit dem ich jedes Problem elegant lösen kann. Das ist natürlich ein Ideal, das praktisch wohl von keiner Sprache wirklich erreicht wird, aber IMHO ist C++ am weitesten davon entfernt.



  • namespace invader schrieb:

    Na z.B. ist Exception Handling zusammen mit manueller Speicherverwaltung eine Blöde Idee, weil erzeugte Objekte nach einer Exception nicht freigegeben werden. In C++ sind daher Krücken wie RAII bzw. Smart Pointer notwendig.

    selbes problem hast du in jeder sprache. finally ist idr schlechter als raii.

    Ich verweise auch mal auf http://yosefk.com/c++fqa/defective.html

    damit disqualifizierst du dich selbst... 😕

    Naja, das ist Ansichtssache. Ich würde es als schlechten Stil empfinden, wenn man zur Lösung eines Problems nicht die von der Sprache genau dafür gedachten Features verwendet und entsprechend dem Paradigma der Sprache programmiert, sondern sich nur bestimmte Features rauspickt und sich irgendwie anders durchmogelt. Vergleichbar wäre es, wenn man in C keine Schleifen verwendet, sondern stattdessen alles mit goto macht.

    dh in sprachen wie ruby ist also kein guter stil möglich?

    Ich will, dass eine Sprache sich auf ein bestimmtes Paradigma festlegt, und mir dazu passend einen gut durchdachten, konsistenten Satz von vielseitig verwendbare Features bietet, mit dem ich jedes Problem elegant lösen kann. Das ist natürlich ein Ideal, das praktisch wohl von keiner Sprache wirklich erreicht wird, aber IMHO ist C++ am weitesten davon entfernt.

    das ist eine schlechte idee.

    weil manchmal muss man funktional, manchmal objekt orientiert und manchmal bunt arbeiten.



  • Shade Of Mine schrieb:

    Ich verweise auch mal auf http://yosefk.com/c++fqa/defective.html

    damit disqualifizierst du dich selbst... 😕

    Damit outest du dich als C++-Fan, der von Kritik an seiner Lieblingssprache nichts wissen will :p

    Ich sehe ja ein, dass es anscheinend Leute gibt, die an dem Feature-Mischmasch in C++ gefallen finden, die sollen dann von mir aus ruhig bei C++ bleiben.


Anmelden zum Antworten