Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Klassenobjekte während d. Laufzeit belibig oft erzeugen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
02.04.2004, 08:57 Uhr
RHBaum



Zur Ausbildung:

Meine Erfahrung ist ... man braeucht mehrere um perfekt zu sein ! Aber niemand wuerde jemand perfekten bezahlen wollen, und auch ned einstellen.
Viel mehr zaehlt meistens, ob die Leute Ahnung von dem Umfeld haben, in dem sie programmieren sollen. Also in Firmen Abteilungen deren Aufgabe nicht vorrangig die erstellung von Software ist, schaut man eher nicht so auf den Informatik Hintergrund, die nehmen lieber Quereinsteiger aus der Fachrichtung, in der sie taetig sind :p

Und als solcher hat man dann auch viel mit Gleichgesinnten zu tun :p Ist manchmal auch zum Haareausraufen. Man hat echt super Ideen, alle wissen um was es geht, aber die SW technische Umsetzung ist .... aehm, naja, sagen wir mal "nicht so den Standards entsprechend". Frueher oder Spaeter stoesst man damit auch auf Probleme. Aber man hat wesentlich weniger Probleme das die Software am Ziel vorbeigeht ... was an und ab der Fall ist, wenn man SW bei professionellen Firmen in Auftrag gibt, aber beim erstellen von lastenheften ned so den durchblick hat.
Vieles wird auch viel unkomplizierter gehandhabt !

Und Matrizenrechnung, perfekte Speicherverwaltung, PointerArithmetik, Software Designs etc ... .kann man lernen wenn man Intresse dran hat. Und frueher oder spaeter bekommt man das, weil man sich selbst immer zu den punkt bringt, wo man fragt wie mans besser machen kann :-) Also gilt wie ueberall : Erfahrung > Studium !!!

@Rip
Du orientierst dich noch sehr viel an C. (Procedual, nicht objektorientiert)
Zeiger werden in C viel extensiver genutzt als in C++.
C++ definiere ich so als Mahraufwand fuer den Rechner, weniger aufwand fuer den programmierer.
Benutzen sollte man beides.
Fuer Sachen die schnell gehen muessen -> C-Like code
Fuer Sachen die funktionieren sollen, erweiterbar sein muessen, und es in erster linie nicht auf performance ankommt -> C++ ;
Das heisst auch, mal lieber eine Kopie von nem Speicherbereich mehr machen, und dafuer besser lesbaren und sichereren code bekommen ....
Ist zum beispiel ein wesentliches Merkmal der stl stringklassen, so schoen sie auch sein moegen, sie machen immmer kopien ! du kannst nicht wirklich mit referenzen arbeiten (oder nur mit tricksen). Aber sie funktionieren intuitiv, sind exceptionneutral, und halt nen standard ....
C++ ist meisst so, das man ne collection aus Klassen hat, die ganz unten in der hirarchie sind, und fast nur c-code kapseln (der stl string z.b)
Diese stellen dir grundlegende Funktionen zur verfuegung.
Die Aufsetzende Applikationsschicht sollte dann nur noch die Basisklassen "C++ like" verbinden ...
Arrays sind C-Konstrukte. Braucht man in C++ eigentlich nur noch, um C-Api's zu befeuern, oder um im Mix mit C Performance zu erzielen. (werden stl-container richtig angewand, sinds meisten nicht so viel langsamer)
Guter Stil ist natuerlich vorhandene Klassen zu nutzen (STL, MFC, QT .... etc) und nicht jedesmal das Rad neu erfinden. Auch sollten klassen schlank bleiben. Klassen mit 100+ Methoden sind ned wirklich c++.
Viele Programmierer Abstrahieren viel zu wenig.
Ne klasse die sich mit Logic und Stringverwaltung auseinandersetzen muss, ist meist schon nen kleiner Schwenk in die Falsche Richtung.

Wenn du erst mal die Basics lernen willst ... dann ists so ok. !!!

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
02.04.2004, 09:09 Uhr
(un)wissender
Niveauwart


Wo kommt eigentlich die Mähr her das C++ so viel langsamer ist also C?!
Vor allem bei großen Programmen ist C++ nach meiner Erfahrung eher schneller, da bei gutem Design eine bessere Übersicht herrscht und viele Coderedundanzen ausbleiben.
Es gibt sogar Abstraktionsmechanismen die C++ teilweise schneller machen als C, da wären z.B. templates und Operatorenüberladung (operator() bei sort, datt Funktionspointer).
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
02.04.2004, 09:48 Uhr
RHBaum




Zitat:

C++ teilweise schneller machen als C


Halt ich fuern Geruecht ... es sei denn C++ verwendet intern assembler, und ich darfs in C nich :-) ok, dann hab ich keine chance.
Ansonsten denk ich dass man mit C zumindest immer genausoschnell sein kann wie c++, wenn mans beherscht.

Zitat:

das C++ so viel langsamer ist also C


Das stimmt so nicht. Das Problem ist das Design, fuer ein gutes Design nimmt man unter C++ eben viel Aufwand in Kauf, und das ist auch ok so.
Das was C++ zur verfuegung stellt an sich , ist schon performant. Nur nuetzt mir die Performance von z.B. ner wahnsinnig schnellen Kopie gar nix, wenn die Kopie an sich nicht noetig ist (aus C sicht) ....
Warum gibts in der STL keine refernzgezaehlten Smartpointer ? Warum keine RefGezaehlten Strings ala CString ?
Richtig, weil sie auch Nachteile/Probleme haben, die man an der Stelle ned haben will ... dafuer macht man lieber ne Kopie mehr....

Schau Dir den Code von Programmen an, die den Anspruch erheben performant zu sein ... Sie haben entweder Klassen die haargenau ihre Ansprueche in C-like code Kapseln, oder sie verwenden in den Hauptprogrammen viel C-Code.
Das die STL z.b. genau das performant bietet was ich brauch, ist eher selten der Fall. Genauso MFC mit ihren CObject, und QT mit ihren QObject.

Oder ich versteh unter C++ was total falsches :-)

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
02.04.2004, 12:30 Uhr
(un)wissender
Niveauwart


STL ist normalerweise sehr performant, das kannste von Hand nur mit sehr großem Aufwand schlagen und mit C oft nicht, weil du nur Funktionspointer hast.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
02.04.2004, 15:26 Uhr
RHBaum




Zitat:

STL ist normalerweise sehr performant


Das ist genau das was immer falsch verstanden wird ...

Ja, die STL ist in das was sie tut, sehr performant. Und gegen eine gute STL Impl hab ich mit reinem C und Funktionspointern keine chance .... wenn ich genau das nachbilde was die STL tut.

Aber zu was schreibt man klassen ? Damit man Code uebersichtlich haelt, leichter wartbar macht ? Dafuer verwendet man in C++ gern Klassen, auch wenn sie nicht 100% das bieten was man braucht, oder einfach nur zu viel. Dafuer sind sie Standard, jeder weiss sofort was das macht, die programmierer nehmens dafuer gern in kauf.

Das vielzitierte Beispiel Array <-> std::vector.

der Zugriff ist auf beide fast gleichschnell (intern ist nen iterator da ja auch nur nen pointer) .
Die erzeugung sieht etwas anders aus.
Gegen ein statisches array aufn stack hat kein std::vector ne chance. Ich glaub das wirst sogar du mir bestaetigen :-)
gegen nen dynamisches Array aber sehr wohl. Da sind die unterschiede sogar bei M$ kaum messbar, und die haben sicher ned die Beste impl :p

Trotzdem nehmen viele, und ich auch, nen vector, auch wenn sie die Anzahl der Elemente vorher kennen. Meist ist mir uebersichtlichkeit und erweiterbarkeit wichtig. und der unterschied dyn - statisches allocieren stoert mich ned so sehr.

Anders siehts bei 3d programmen aus. wer nen vector nimmt, um nen 3dimensionalen bildpunkt abzuspeichern, ist selbst schuld.
Dann nimmt man entweder statische arrays, oder ne grafiklib, die nicht standard ist, bietet einem da c++ unterstuetzung.

Um so mehr Performance man braucht, um so komplexer und spezielisierter werden die Klassen.
Und das ist ne reine Designfrage, hat nichts mit internen Techniken und der programmiersprache zu tun. Ne auf meine Aufgabe spezialisierte klasse, die viel low level code verwendet, wird immer mehr Perfomance haben als nen Samelsoruim aus kombinierten Standardklassen.

Aber die Kombinierten Standardklassen machen vieles leichter und wartbarer ...:p

Ich zum besipiel nehme oft die stl strings. auch an stellen wo ich eigentlich ne refernz auf nen string langt, statt mit referenzen und pointern zu arbeiten, und erspar mir ne menge fehlerbehandlungscode. Dafuer nehm ich die zusaetzliche kopie gern in kauf !

Ciao ...

Dieser Post wurde am 02.04.2004 um 15:29 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: