Klasse bzw. Objekt kann nicht erstellt werden
-
Kümmelkorn schrieb:
newC++omer schrieb:
min. einen vorteil müssen die teile ja haben.
Könnte sein, dass sie schneller und ressourcenschonender sind, weil maschinennaher und nicht objektorientiert. Spielt aber auf PCs keine Rolle, höchstens auf Mikrocontrollern, außerdem benutzt du eine Objektorientierte Sprache, also solltest du auch objektorientierte Lösungen benutzen - für alles andere kannst du C nutzen!
Gruß, Micha
Ich würde im natürlich auch zu std::string raten, anstatt zu char Arrays, allerdings ist deine Argumentation sehr fraghaft.
C++ ist nicht einfach nur objektorientiert, es unterstüzt mehrere Programmierparadigmen. Daher muss man nicht immer zwangsläufig in C++ objektorientiert programmieren und objektorientierte Lösungen vorziehen.
Viel mehr sollte man C++ als ein ganzes sehen, was aus mehreren Teilen( Teilsprachen ) besteht. Was für den einen Teil von C++ gilt, dass kann für nen anderen schon wieder "falsch" sein.Lg freeG
-
Kümmelkorn schrieb:
Könnte sein, dass sie schneller und ressourcenschonender sind, weil maschinennaher und nicht objektorientiert.
Sowas musste ja kommen. Wieder mal die üblichen Mythen.
Warum genau ist der objektorientierte Ansatz langsamer als der prozedurale?
-
Kümmelkorn schrieb:
Btw: Was für einen nicht-Fließkommatyp sollte man für Geld nutzen? Nutzt du wirklich Integer für Geldbeträge, SeppJ?
Grundsätzlich entweder einen Integerdatentyp oder Festkommadatentyp.
-
Festkommadatentyp
Interessant, hast du da Beispiele? Ich kenne nur Fließkommatypen und finde in Google nichts - gibts da einen Standardtyp für, vllt. in der STL oder so?
Nexus schrieb:
Warum genau ist der objektorientierte Ansatz langsamer als der prozedurale?
Ich schrieb "könnte". Aber wenn du es besser weißt, erklär mir doch mal, warum bei Mikrocontrollern mit C programmiert wird? Das Argument, dass ich auf Nachfrage in einem Betrieb erhielt, war sinngemäß "weil man dort den ganzen objektorientierten Kladderadatsch nicht braucht und dies nur ressourcen verbrauchen würde". Afaik können die meisten Mikrocontroller nicht mal C++, aber wie gesagt: Ich bin kein Mikrocontroller-Programmierer und vermute, dass es auch für den Thread-Starter irrelevant ist!
-
Kümmelkorn schrieb:
Festkommadatentyp
Interessant, hast du da Beispiele? Ich kenne nur Fließkommatypen und finde in Google nichts - gibts da einen Standardtyp für, vllt. in der STL oder so?
Nein, aber unzählige andere Implementierungen.
Nexus schrieb:
Warum genau ist der objektorientierte Ansatz langsamer als der prozedurale?
Ich schrieb "könnte". Aber wenn du es besser weißt, erklär mir doch mal, warum bei Mikrocontrollern mit C programmiert wird? Das Argument, dass ich auf Nachfrage in einem Betrieb erhielt, war sinngemäß "weil man dort den ganzen objektorientierten Kladderadatsch nicht braucht und dies nur ressourcen verbrauchen würde". Afaik können die meisten Mikrocontroller nicht mal C++, aber wie gesagt: Ich bin kein Mikrocontroller-Programmierer und vermute, dass es auch für den Thread-Starter irrelevant ist!
std::string braucht ein paar Bytes mehr Speicher. Außerdem hat man schneller unbeabsichtigt eine Kopie gemacht. Aber langsamer ist std::string nicht.
-
Kümmelkorn, reagier doch nicht so empfindlich. Ich wollte dich nur drauf aufmerksam machen, dass Objektorientierung an sich ein Konzept ist und dessen Implementierung in C++ im generell eben nicht langsamer ist als ein äquivalenter prozeduraler Code. Manchmal ist sogar das Gegenteil der Fall, z.B. bei
std::string::length()vs.strlen(). Auch virtuelle Funktionen sind nicht langsamer als ein anderer Dispatch-Mechanismus wie z.B.if,switchoder Funktionszeiger.Davon abgesehen kannst du auch in C bis zu einem gewissen Grad objektorientiert programmieren, C++ bietet nur mehr Sprachmittel zur Umsetzung an.
-
Kümmelkorn schrieb:
Interessant, hast du da Beispiele? Ich kenne nur Fließkommatypen und finde in Google nichts - gibts da einen Standardtyp für, vllt. in der STL oder so?
Standardtypen für Festkommazahlen gibt es in der C++ Standardbibliothek nicht, wobei es diverse Bibliotheken gibt (Häufig heißt der Datentyp ähnlich wie Dezimal oder Money).
Kümmelkorn schrieb:
Nexus schrieb:
Warum genau ist der objektorientierte Ansatz langsamer als der prozedurale?
Ich schrieb "könnte". Aber wenn du es besser weißt, erklär mir doch mal, warum bei Mikrocontrollern mit C programmiert wird?
Dies stimmt so pauschal nicht. Bei Mikrocontrollern wird durchaus auch C++ verwendet (wie mir gestern u.a. von einem Maschinenhersteller bei einer Firmenführung auch nochmal bestätigt wurde), wobei ggf. auf bestimmte für Mikrocontroller problematische Teile/Techniken verzichtet wird.
Kümmelkorn schrieb:
"weil man dort den ganzen objektorientierten Kladderadatsch nicht braucht und dies nur ressourcen verbrauchen würde".
Eine Klasse produziert noch keinen Overhead, virtual wiederum bringt Overhead mit sich (wobei man auch immer daran denken sollte, wie man einen vergleichbaren Effekt ohne virtual hinbekommt), auch wird man auch viele kleine Speicherallokationen verzichten.
Kümmelkorn schrieb:
Afaik können die meisten Mikrocontroller nicht mal C++
Das ist keine Frage des Mikrocontrollers, sondern des Compilers.
-
MikeS schrieb:
...
Bitte mehr Tatsachen lernen oder in anderen Foren die Objektorientierung bashen. Hier lösche ich sowas.
-
newC++omer schrieb:
ok soweit verstanden.
also soll ich anstatt der char-arrays die strings benutzen?
warum wird uns dann beigebracht char-arrays zu nutzen?
min. einen vorteil müssen die teile ja haben.Frau Leutheusser-Schnarrenberger ist schonmal erfreut, daß Deine Nachnamen mehr als 20 Zeichen können. Frau Rodriguez de la Luz del Topo zeigt sich auch erfreut. Aber irgendwann kracht es, und zwar dann, wenn viele neue Namen aufgenommen werden und Du den Streß gerade gar nicht gebrauchen kannst.
-
Char-Arrays statt std::string haben schlicht den Vorteil dass man den Speicher statisch alloziert und kein new/delete oä. braucht, der String macht das aber dynamisch.
Mit Char-Arrays als Strings rumzufummeln kann durchaus Sinn machen, aber für dich garantiert nicht.