Laufzeit OOP
-
Zusammengefasst: Es gibt praktisch nichts, was du in C machen kannst, was du nicht auch in C++ machen könntest, umgekehrt aber schon. C++ ist ausdrucksstärker und ermöglicht es, mit weniger Code die gleiche oder bessere Performance zu erreichen*.
=> Es gibt keinen vernünftigen Grund, heutzutage noch C zu benutzen, wenn C++ ebenfalls eine Option wäre...
* Vorausgesetzt, man weiß, was man tut; aber diese Voraussetzung muss generell erfüllt sein, damit ein solcher Vergleich überhaupt jemals irgendwie Sinn ergeben könnte. Schlechten oder sinnlosen C++ Code mit optimalem C Code zu vergleichen, oder umgekehrt – wie es in solchen Diskussionen meist getan wird – ist natürlich völlig wertlos.
-
sehr gut sehr gut sehr gut!

C++ ist ausdrucksstärker und ermöglicht es, mit weniger Code die gleiche oder bessere Performance zu erreichen.
wahnsinn ... ich hab grad die ersten Structs in Klassen umgewandelt, denen noch ein paar nette Funktionen und statische Werte gegeben und ich liebe diesen Konstruktor!

Meine 300 Zeilen Code, die damals den Speicher freigeräumt, den Input eingelesen und einige erste Werte berechnet haben ... die haben sich zu 30 Zeilen gekürzt.
Und ich kann dank dem Konstruktor und den Default Werten mit nur einem Befehl auf alles zugreifen, was ich brauche!
ohne Laufzeitprobleme ... ! uiuiui *begeistert*
Ich liebe C++ jetzt schon!

-
Warte nur, bis du lernst, was ein Destruktor ist (das dürfte so ungefähr das nächste Kapitel nach dem Konstruktor sein). Damit kannst du richtig tolle Sachen machen (z.B. dies). Sag auf Wiedersehen zu sämtlichen Problemen und Fallstricken bei der SpeicherverwaltungRessourcenverwaltung!
-
Die Initialisierung eines Objektes in einer Funktion zusammenzufassen, ist auch in C möglich. Und sinnvoll. Neu an Konstruktoren ist lediglich, dass du sicherstellen kannst, dass ein Objekt nie uninitialisiert herumliegt. Das ist auch nützlich, aber für die Codekürzung sollte es eigentlich weniger relevant sein.
(Automatische) Destruktoren sind da spannender, wie SeppJ richtig anspricht.
-
SeppJ schrieb:
Sag auf Wiedersehen zu sämtlichen Problemen und Fallstricken
Ja, auf Wiedersehen, denn die Probleme treten hundertmal schlimmer wieder auf, wenn die Ro3 verletzt wurde, Object slicing auftritt oder sonstwas passiert.
-
widerseher schrieb:
SeppJ schrieb:
Sag auf Wiedersehen zu sämtlichen Problemen und Fallstricken
Ja, auf Wiedersehen, denn die Probleme treten hundertmal schlimmer wieder auf, wenn die Ro3 verletzt wurde, Object slicing auftritt oder sonstwas passiert.
dot schrieb:
* Vorausgesetzt, man weiß, was man tut; aber diese Voraussetzung muss generell erfüllt sein, damit ein solcher Vergleich überhaupt jemals irgendwie Sinn ergeben könnte. Schlechten oder sinnlosen C++ Code mit optimalem C Code zu vergleichen, oder umgekehrt – wie es in solchen Diskussionen meist getan wird – ist natürlich völlig wertlos.
Wobei man in C++ an wesentlich weniger denken muss, damit es richtig und gut ist. Die Regel der großen 3/5 ist schon so ziemlich alles, wo dran man hier denken muss, meistens nicht einmal das, weil man als Ressourcenhalter einen fertigen Handler aus der Standardbibliothek nimmt. Und Slicing möchte ich mal in einem nicht-konstruierten Beispiel sehen.
Wie geht der alte Spruch? In C passiert es leicht, dass man sich selbst in den Fuß zu schießt. In C++ ist das viel schwerer, aber wenn man es schafft, dann ist auch gleich das ganze Bein weg.
Das trifft's recht gut.
-
widerseher schrieb:
SeppJ schrieb:
Sag auf Wiedersehen zu sämtlichen Problemen und Fallstricken
Ja, auf Wiedersehen, denn die Probleme treten hundertmal schlimmer wieder auf, wenn die Ro3 verletzt wurde, Object slicing auftritt oder sonstwas passiert.
dann verletze die regel der drei grossen eben nicht, so schwierig?
-
Alles setzt den gewissenhaften Einsatz des Programmierers voraus.

Ich kann nur von mir sprechen, aber ich bin begeistert. Hätte nie gedacht, dass ein Umstieg so toll werden würde.
@SeppJ
Ja, den kenn ich auch schon! Konstruktor und Destruktor nutze ich zur Zeit um meine Elemente mitzuzählen. Dabei ist der Konstruktor für mich noch viel mächtiger, weil ich jetzt viele Werte bei der Erstellung mit Default Werten besetzten kann und sie später an angemessener Stelle berechne. Das macht jeden Funktionsaufruf soo viel angenehmer, weil jedes Objekt bereitwillig sagt "nimm mich"
(PS: ich bin jetzt aus dem Haus. Nicht wundern, ich antworte wohl erst morgen
)
-
[quote="Lymogry][...]Konstruktor und Destruktor nutze ich zur Zeit[...][/quote]wenn du den destruktor nutzt, nutzt du hoffentlich auch den kopierkonstruktor und den zuweisungsoperator...
-
kenner der regeln schrieb:
[quote="Lymogry][...]Konstruktor und Destruktor nutze ich zur Zeit[...]
wenn du den destruktor nutzt, nutzt du hoffentlich auch den kopierkonstruktor und den zuweisungsoperator...[/quote]
Ach, ruhig mal ein paar Tage absturzgefährdet spielen.