welche vorteile bietet c++ gegenüber c



  • Ah, danke für die Hilfe. 🙂
    Nettes Beispiel



  • 1. Bjarne sollte eine Simualtion entwickeln und da in einer Simulation Objekte zusammen spielen, und Simula (wer hätte das gedacht) objektorientiert für Simulationen entwickelt wurde, tat er das in Simula. Simula hatte schon in den 60er Jahren Garbage Collection, was heute von Java, C# u.a. als modern gefeiert wird. 🙄 Aber durch den GC war die Simulation von Bjarne zu langsam.

    2. Also schaute er sich nach was schnellerem um. Dabei ist er auf BCPL gestoßen. Eine typlose Sprache, die sehr schnell ist. Er setzte es damit um, mußte aber feststellen, das BCPL zwar performant ist, aber ätzend schlecht für große Projekte war, weil es keine Typen gab.

    3. In der Zeit, entwickelten aber die Unix-Gurus C. Bjarne stellte fest, das C mit UNIX bewies, das C sowohl für große Projekte geeignet ist, und performant ist!

    4. Aber von Simula fand er die Objektorientierung für seine Simulation genial, die in C aber fehlte. 😡 Also war die Lösung: C mit Simula-Fähigkeiten. Was dann C with Classes heraus brachte und später in C++ umbenannt wurde.

    Ich persönlich finde hier folgendes interessant: bis C++ entstand, hat der Erfinder Bjarne Stroustrup viele Sprachtypen für ein reales Projekt durchprobiert. Er hat förmlich eine Odyssee durch gemacht und damit unfreiwillig Erfahrung gesammelt, was eine Sprache zu sein hat oder auch nicht zu sein hat. Und aus dieser Odyssee hat er eine Lösung erarbeitet. Es gab also wirklich ein "Problem" zu lösen! Die Sprache C++ ist nicht aus Marketinggründen entstanden.

    C++ ist eine der meist gehassten Sprachen. Aber komischerweise trotzdem meist eingesetzten Sprache. 😃 Und viele Menschen prophezeien jedes Jahr ihren Tod.

    Besonders da C++ eine Multiparadigmen-Sprache ist, und so viele Einsatzfelder abdeckt, fühlen sich alle anderen Sprachen bedroht. Selbst C Programmierer fühlen sich von C++ bedroht, weil C++ immer mehr in dessen Territorien wildert, da C++ verstärkt in Embedded-Systemen eingesetzt wird. Wer z.B. in den ipod-Nano das Lizenz-Menü aufruft, wird darin die C++ Boost-Library-Lizenz finden.

    C++ wird nicht nur in Simulationen und ipods genutzt, sondern auch in Maschinen die man normalerweise simuliert. 😉 Wie z.B. im JOINT STRIKE FIGHTER F-35 Jet. Man kann die Programmier-Richtlinien für JOINT STRIKE FIGHTER unter folgender URL bei Bjarne herunter laden:
    http://www.research.att.com/~bs/JSF-AV-rules.pdf

    Wo wird C++ beim JSF eingesetzt?

    Die Avionik-Software wird bei Entwicklungsende voraussichtlich rund 4,5 Millionen Zeilen C++-Code umfassen

    Quelle: http://de.wikipedia.org/wiki/Lockheed_Martin_F-35

    Die Avionik – ... – ist ein Begriff aus der Luft- und Raumfahrttechnik und bezeichnet die Gesamtheit der elektrischen und elektronischen Geräte an Bord eines Fluggerätes, einschließlich der Fluginstrumente.

    Quelle: http://de.wikipedia.org/wiki/Avionik



  • Artchi schrieb:

    Ich persönlich finde hier folgendes interessant: bis C++ entstand, hat der Erfinder Bjarne Stroustrup viele Sprachtypen für ein reales Projekt durchprobiert. Er hat förmlich eine Odyssee durch gemacht und damit unfreiwillig Erfahrung gesammelt, was eine Sprache zu sein hat oder auch nicht zu sein hat.

    Finde ich nicht außergewöhnlich. Das ist vermutlich bei sehr vielen Sprachen so, dass man sich bestehende anschaut und sagt: "Okay, das ist nicht gut und das ist gut für das, was wir mit der neuen Sprache FooBar machen wollen." Dann kommen natürlich noch "neue" Features hinzu, die sich so eher selten oder gar nicht in anderen Sprachen fanden.

    Und aus dieser Odyssee hat er eine Lösung erarbeitet. Es gab also wirklich ein "Problem" zu lösen! Die Sprache C++ ist nicht aus Marketinggründen entstanden.

    Die Rückwärtskompatibilität zu C ist ein Marketinggrund, oder nicht? Er wollte möglichst viele C Programmierer für die Sprache begeistern. Oder spricht sonst was dafür, unbedingt C-Syntax einzusetzen (die in C++ dann so herrlich kontextsensitiv wird)? Schließlich haben alle relevanten Sprachen ein Möglichkeit, C-Code aufzurufen.

    C++ ist eine der meist gehassten Sprachen. Aber komischerweise trotzdem meist eingesetzten Sprache. 😃 Und viele Menschen prophezeien jedes Jahr ihren Tod.

    Eine Sprache mit mindestens mittelmäßiger Bedeutung stirbt nicht einfach aus. Es gibt viel Legacy-Code, den es zu pflegen gilt. Die wichtigeren Fragen sind imo: Wie viele neue Projekte werden in C++ gestartet? Und in welchen Einsatzfeldern? Wie wird C++ an den Universitäten unterstützt? Gibt es eine steigende oder fallende Anzahl an Leuten, die C++ beherrschen? Diese Fragen kann man natürlich auch für C stellen etc. Ich will nicht darauf hinaus, dass X besser als Y ist.

    C++ wird nicht nur in Simulationen und ipods genutzt, sondern auch in Maschinen die man normalerweise simuliert. 😉 Wie z.B. im JOINT STRIKE FIGHTER F-35 Jet. Man kann die Programmier-Richtlinien für JOINT STRIKE FIGHTER unter folgender URL bei Bjarne herunter laden:
    http://www.research.att.com/~bs/JSF-AV-rules.pdf

    Wo wird C++ beim JSF eingesetzt?

    Die Avionik-Software wird bei Entwicklungsende voraussichtlich rund 4,5 Millionen Zeilen C++-Code umfassen

    Quelle: http://de.wikipedia.org/wiki/Lockheed_Martin_F-35

    Die Avionik – ... – ist ein Begriff aus der Luft- und Raumfahrttechnik und bezeichnet die Gesamtheit der elektrischen und elektronischen Geräte an Bord eines Fluggerätes, einschließlich der Fluginstrumente.

    Quelle: http://de.wikipedia.org/wiki/Avionik

    JSF? pfff, kinderkacke :p This is the real shit: http://www.flownet.com/gat/jpl-lisp.html (Das ist eher allgemein gehalten, hier wird's dann konkret: http://ic.arc.nasa.gov/publications/pdf/2000-0176.pdf Aber beides ist lesenswert)



  • Artchi schrieb:

    Simula hatte schon in den 60er Jahren Garbage Collection, was heute von Java, C# u.a. als modern gefeiert wird. 🙄

    ... und LISP schon 1959

    wieso hat man eigentlich nicht einfach mit Simula weitergearbeitet und den GC weggelassen, wenn er nicht performant genug für die damalige Hardware war?

    Algol ist doch eine hübsche Sprache, die im Vergleich mit der rund 40 Jahre jüngeren Go noch gut abschneidet.



  • Ganz einfach gesagt: C war der ürsprüngliche Standard und C++ hat diesen sinnvoll erweitert. Beides ist erhalten geblieben und kann parallel genutzt werden. Was du daraus machst, bleibt allein deine Angelegenheit.



  • NoName57253 schrieb:

    Ich bin zwar erst 2 Monate dabei, aber das errinert mich stark an struct..

    Kann mich jemand aufkären ?

    Das dich dies an struct erinnert ist richtig, denn auch das ist in C mit struct möglich.

    Aber Klassen bieten noch weitere Features im Gegesatz zu structs.

    Das wichtigste dürften wohl Methoden sein.
    Eine Methode ist im Prinzip nichts anderes als eine Funktion, die an eine Klasse gebunden ist.

    Du könntest also entsprechend dem Beispiel eine Methode schreiben wie z.b:

    auto_fahre_los();

    oder

    auto_halte_an();

    Mit Structs ist so etwas nicht möglich, da bei Structs die Structs von den Funktionen getrennt sind.
    In C sind Funktionen also nicht an die Structs gebunden.
    In C++ kann man aber Funktionen an Klassen binden.

    Desweiteren bieten Structs keine Vererbung.

    Du kannst also nicht ein Struct auf ein anderes Struct aufbauen lassen, in dem es dessen Elemente ert.
    In deinem Autobeispiel hast du z.b. zwar Datenelemente wie Reifen, Motor & Co,
    aber eben noch kein Schiebedach oder Cabrioversion usw.

    Bei einer Klasse könntest du also eine neue Klasse Namens "Cabrio" definieren und alle Eigenschaften der Klasse "Auto" erben.

    Damit hat also auch das Carbio Daten für Reifen, Motor usw.



  • krümelkacker schrieb:

    NoName57253 schrieb:

    Mein Vater sagt : Assembler ist am bestem damit kannst du alles machen

    Mit 99% C und 1% Assembler kannst Du auch alles machen.
    Mit 99% C++ und 1% Assembler kannst Du auch alles machen.
    Das ist also kein Argument.

    Das stimmt leider nicht ganz.

    Wenn man z.b. spezielle Mikrocontroller programmieren will, dann braucht man dafür auch einen entsprechenden Compiler und einen C++ Compiler gibt es halt nicht immer für einen Mikrocontroller.

    Einen C Compiler für einen Mikrocontroller kriegt man aber immer.
    Das ist der große Vorteil von C, was unter anderem auch daran liegt, daß C sehr schlank ist und es daher kein so riesiger Aufwand ist, für eine gegebnene CPU oder Mikrocontroller einen C Compiler zu schreiben.

    Assembler ist dagegen kritisch, da Assembler überwiegend an die CPU gebunden ist.
    Man kann zwar einige wenige Funktionen (z.b. mov) auf andere CPU Plattformen übertragen, aber es ist halt doch alles irgendwie etwas anders.

    Noch etwas zum Unterschied zwischen C und C++.

    C++ hat noch ein wichtiges Feature, daß C nicht kann.
    Die Funktionsüberladung.

    Wenn man in C z.b. den Betrag eines Zahlenwertes herausbekommen will,
    dann muß man darauf achten welche Funktion man verwendet, denn für jeden Datentyp (int, double, float) gibt es einen anderen Funktionsnamen:
    z.B.
    für int Werte heißt diese abs()
    für double heißt sie fabs()
    und für float fabsf(x)

    Bei C++ ist das nicht notwendig.
    Dank Funktionsüberladung kann man eine Funktion schreiben die mit allen Datentypen die man als Parameter gibt klarkommt

    mein_abs() kann also int, double und float Werte bearbeiten.

    Das spart mächtig Arbeit und sorgt für weniger Verwirrung.

    NoName57253 schrieb:

    Naja, letztlich hab ich mich für C entschieden da :

    Das ist schade. Ich will Dir nicht vorschreiben, was Du zu lernen hast. Aber wenn Du die Wahl zwischen C und C++ hast, dann würde ich Dir zu C++ raten.

    Ich sehe das anders.
    Er ist Neuling und deswegen ist C besser geeignet, da der Sprachumfang kleiner ist.

    Wenn er dann C beherrscht, dann kann er auf C++ umsteigen und weiterlernen.



  • Artchi schrieb:

    C++ ist eine der meist gehassten Sprachen. Aber komischerweise trotzdem meist eingesetzten Sprache. 😃 Und viele Menschen prophezeien jedes Jahr ihren Tod.

    D 2.0 kommt nächstes Jahr.

    http://de.wikipedia.org/wiki/D_(Programmiersprache)

    Besonders da C++ eine Multiparadigmen-Sprache ist, und so viele Einsatzfelder abdeckt, fühlen sich alle anderen Sprachen bedroht. Selbst C Programmierer fühlen sich von C++ bedroht, weil C++ immer mehr in dessen Territorien wildert, da C++ verstärkt in Embedded-Systemen eingesetzt wird. Wer z.B. in den ipod-Nano das Lizenz-Menü aufruft, wird darin die C++ Boost-Library-Lizenz finden.

    im ipod Nano steckt aber auch eine ARM CPU drin und für Embedded Verhältnisse ist eine 32 Bit ARM CPU mit Zig Speicher schon eine recht fette CPU.
    Fett im Sinne von bietet viel Performance, Speicher und ist 32 Bitting.

    Deswegen macht C++ dort auch Sinn, denn so eine ARM CPU ist inzwischen auch so schnell und mindestens so Leistungsfähig wie ein Pentium 1 bei dem man früher schon C++ verwendet hat.

    Aber für andere Embedded Computer bzw. Mikrocontroller wie z.B. ATMega8, MSP430 oder PIC ist C++ natürlich völliger Overhead und Quatsch.

    Denn der Speicher ist bei diesen CPU Architekturen auf wenige KByte bestennfalls noch wenige MByte begrenzt und daher wird man darauf nie Großprojekte realisieren, wo C++ seine Vorteile ausspielen könnte.
    Deswegen schreibt man für diese auch keinen C++ Compiler, C reicht hier völlig und die C++ STD würde nur den ganzen Flashspeicher auf diesen kleinen Minicomputern wegfressen.

    C++ ist dort also völlig unnötig.

    Sinn macht C++ also erst auf leistungsfähigeren Embedded Computern wie eben ARM oder AVR32 Sinn.
    Die eigentliche Frage ist also, werden die ARM und AVR32 µC irgendwann die anderen kleineren µC verdrängen, wenn man diese Frage mit ja beantworten kann, dann kann man durchaus auf C++ für Embedded hoffen.

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.



  • C++ antworter schrieb:

    Einen C Compiler für einen Mikrocontroller kriegt man aber immer.

    Und damit kann man von Comeau deren C++ Compiler dafür portieren lassen, denn dieser Compiler erzeugt ohnehin nur C-Code.



  • ~john schrieb:

    C++ antworter schrieb:

    Einen C Compiler für einen Mikrocontroller kriegt man aber immer.

    Und damit kann man von Comeau deren C++ Compiler dafür portieren lassen, denn dieser Compiler erzeugt ohnehin nur C-Code.

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.



  • C++ antworter schrieb:

    NoName57253 schrieb:

    Naja, letztlich hab ich mich für C entschieden da :

    Das ist schade. Ich will Dir nicht vorschreiben, was Du zu lernen hast. Aber wenn Du die Wahl zwischen C und C++ hast, dann würde ich Dir zu C++ raten.

    Ich sehe das anders.
    Er ist Neuling und deswegen ist C besser geeignet, da der Sprachumfang kleiner ist.

    Wenn er dann C beherrscht, dann kann er auf C++ umsteigen und weiterlernen.

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt. Siehe http://www.research.att.com/~bs/new_learning.pdf

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    C++ antworter schrieb:

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.

    Schreib doch mal etwas, womit man Dich ernst nehmen kann.

    kk



  • C++ antworter schrieb:

    Ich sehe das anders.
    Er ist Neuling und deswegen ist C besser geeignet, da der Sprachumfang kleiner ist.

    Wenn er dann C beherrscht, dann kann er auf C++ umsteigen und weiterlernen.

    Was für ein Schwachsinn. In C++ programmiert man komplett anders als in C, das Umlernen hat dann oft einen Misch-Stil zur Folge.



  • krümelkacker schrieb:

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt.

    (ich bin zwar nicht der Angesprochene, aber ...)

    ... seit wann wird Wahrheit denn nach dem Mehrheitsprinzip entschieden? 😃

    wie wäre es mit dieser Reihenfolge:

    1. C lernen (=> wg. Syntax, Zeiger usw)
    2. eine echte objektorientierte Sprache lernen (=> wg. Konzept OOP)
    3. C++ verstehen.



  • krümelkacker schrieb:

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    😃 Fail...

    ... seit wann wird Wahrheit denn nach dem Mehrheitsprinzip entschieden? 😃

    Lies den Text, verstehe die Argumente (ja, echte Argumente 😮 ) und schließe dich der Mehrheit an. Geht natürlich nur, wenn du nicht sowieso schon entschlossen hast gegen die mehrheitliche Meinung zu sein.

    1. C lernen (=> wg. Syntax, Zeiger usw)
    2. eine echte objektorientierte Sprache lernen (=> wg. Konzept OOP)
    3. C++ verstehen.

    1. Braucht man nicht, Syntax, Zeiger, etc. lernt man auch wunderbar direkt mit einem guten (!) C++ Buch.
    2. Was ist denn eine "echte" OO Sprache? Eine mit Message Passing? 😉
    3. Das wäre ein guter Punkt um anzufangen. Direkt die C++ Denkweise verstehen und so gar nicht erst auf die Idee kommen C mit Klassen zu schreiben.



  • Faul schrieb:

    Lies den Text, verstehe die Argumente (ja, echte Argumente 😮 ) und schließe dich der Mehrheit an.

    ich kann nicht lesen 😮

    Mehrheitsmeinung ist immer nur eine Momentaufnahme.

    Früher war mal die Mehrheitsmeinung, daß "echte" Programmierer nur einen Assembler brauchen.

    Heute programmieren "echte" Programmierer mit C++ oder java und lachen über diese Idee.

    Im Jahr 2100 giltst du vielleicht als Ewiggestriger, wenn du noch in Lisp oder haskell programmierst, weil dann Mehrheitsmeinung ist, daß "echte" Programmierer in C++p (C++ mit Prolog) oder APL programmieren.

    Wer weiß das schon. Nur eins ist klar: das Abstraktionsniveau steigt.



  • ich kann nicht lesen 😮

    Den Eindruck habe ich auch.

    Mehrheitsmeinung ist immer nur eine Momentaufnahme.

    Man muss aber noch zwischen Trend und begründeter Argumentation unterscheiden können. Es ist nicht nur einfach in Mode zu sagen "C vor C++ zu lernen macht wenig Sinn", sondern es gibt tatsächlich stichhaltige Argumente dafür.



  • krümelkacker schrieb:

    Damit solltest Du heutzutage zu der Minderheit gehören, die diese Meinung vertritt. Siehe http://www.research.att.com/~bs/new_learning.pdf

    Nun, ich bin der Meinung, daß jemand, der Programmieren lernen möchte, lernen sollte, wie ein Computer tickt und da ist die Low Level Programmierung in einer High Level Language Ebene wie sie C bietet gerade zu ideal dafür, ohne all zu tief auf Assemblertiefe absteigen zu müssen.

    Char Arrays, Arraygrenzen, Pointer usw., das sind alles elementare Grundbausteine die man für ein besseres Verständnis über die Programmierung erlangen sollte.

    Und wer wirklich eher so wie BS es vorschlägt eine Programmiersprache lernen möchte, der sollte dann schon eher gleich Java und nicht C++ zum Lernen wählen, denn mit Java kann der Neuling dann auch gleich auf die riesige Auswahl an Bibliothektsfunktionen zugreifen, insbesondere auch der Nutzung von GUI Funktionen, wie es BS in seinem Text anführt und dieses bei C++ vermißt.

    Dann noch zum Beispiel der 1. Aufgabe.
    Das was das hier BS anführt ist etwas an den Haaren herbeigezogen.
    Am Anfang reicht ein scanf mit begrenzter Eingabegröße völlig, denn der Anfänger muß erstmal lernen was ne While Schleife ist, was eine Function ist und was der Unterschied zwischen Call by Value und Call by Reference ist.
    All das kann schon genug verwirren.
    Sobald er das im Schlaf beherrscht gelangt er über die Pointerarithmetik sowieso zur Dynamischen Speicherverwaltung mit malloc & co und spätestens dann wird er die im Text erwähnte Aufgabe nicht so falsch machen wie BS.

    Was hier nämlich BS meiner Meinung nach falsch macht, ist daß er im 3. Beispiel der 1. Aufgabe die ganze Stringeingabe nicht einfach in eine eigene Funktion für die dynamische Eingabe von Chararrays packt, denn dann bleibt main sauber und schön wartbar, während die Eingabefunktion dann jederzeit wiederverwendbar ist.

    Man muß also nur wissen, wie man in C am besten programmiert.
    Das zweite Beispiel ist etwas unfair.
    Wem es hier um Performance geht, der schreibt seine eigene Quicksortfunktion und baut den Abschnitt bezügl. der Comparefunktion gleich mit ein, dann spart er sich den Funktionsaufruf von Compare.

    C++ antworter schrieb:

    Noch eine Anmerkung zu Simulationen:
    John Carmack hat sein Doom 3 in C geschrieben.

    Das kaufe ich Dir nicht ab.
    http://en.wikipedia.org/wiki/Id_Tech_4

    Ok, dann habe ich das mit Quake 3 verwechselt.

    Die Quake 3 Engine ist definitiv noch in C geschrieben.

    C++ antworter schrieb:

    Wenn dem so ist, dann brauche ich aber auch kein C++, sondern kann auch gleich Vala als Programmiersprache einsetzen.

    Schreib doch mal etwas, womit man Dich ernst nehmen kann.

    kk

    [/QUOTE]
    Ist doch war.

    Wer in C++ schreibt um den Code dann am Ende vom Compiler in C Code umzuwandeln, anstatt gleich in Assembler oder Maschinencode, der kann sehr wohl dann gleich Vala nehmen, denn Vala macht genau das auch.

    Es bleibt also Fakt, es gibt kaum C++ Compiler für kleine Embedded µC.



  • 314159265358979 schrieb:

    Was für ein Schwachsinn. In C++ programmiert man komplett anders als in C, das Umlernen hat dann oft einen Misch-Stil zur Folge.

    Mit den entsprechenden Büchern hat es keinen Misch-Stil zur Folge und die Grundbausteine wie Schleifen und Funktionen braucht man auch in C++.

    Dein "Schwachsinn" ist übrigens schlechter Diskussionsstil, denn kannst du dir echt sparen.



  • Nur, um wenigstens ein Fünkchen von "Meta-Feedback" zu geben: Nichts von dem, was Du (c++ antworter) geschrieben hast, hat dazu geführt, dass sich mein Standpunkt bzgl C++ / bestem Lernansatz für C++ geändert hat. Das beruht offensichtlich auf Gegenseitigkeit :). Von mir aus gibt es dazu nichts mehr zu sagen.

    Gruß,
    kk



  • C++ antworter, es gibt in C so viele Sprachmittel und Techniken, welche in C++ durch bessere Alternativen abgelöst werden. Viele Leute verwenden diese bei einem Umstieg auf C++ aber weiterhin wegen der Kompatibilität. Wieso sollte man sich auf einmal alles abgewöhnen, wenn es weiterhin funktioniert? Genau hier liegt das Problem, welches man immer wieder schön im C++-Unterforum sieht und welches man beim Direkteinstieg zu C++ nicht hätte.

    Um ein paar Beispiele zu nennen (auch wenn es Leute gibt, welche die folgenden Punkte in C++ benutzen, kommt man generell gut ohne sie aus):

    • Variable Argument Lists
    • Makros für Funktionen und Konstanten
    • void*
    • Manuelle Speicherverwaltung mit malloc() und free()
    • Single-Entry, Single-Exit
    • Rohe Arrays
    • union
    • Zeichenkettenverarbeitung mit C-Strings
    • C-Casts
    • Prefixes als Namensraum
    • Globale Variablen

    Wenn man C lernen will, lernt man C, doch wenn man eh mit dem Hintergedanken anfängt, sich später C++ anzuschauen, ist man besser beraten, gleich damit anzufangen.


Anmelden zum Antworten