[Code] FileExplorer - Verbesserungsvorschläge?
-
SideWinder schrieb:
Was stellst du dir statt NO_FILE vor? Mir fällt da nichts besseres ein als ein Standardobjekt zu definieren, dass == keiner Datei bedeutet.
Ich kann ja nicht vom User verlangen, dass der jedesmal try/catch macht wenn er einen Befehl ausführen will, also sind Exceptions auch nicht das Wahre.nein, try/catch auf keinen fall.
aber warum kann der user überhaupt ein objekt NO_FILE in der hand halten?
weil du den returnwert überladen hast!
normalerweise würde man zwei sachen zurückgeben, nen bool und ne File.
kann man vorher fragen, ob noch ein File da ist? wohl kaum, da man sich nicht zu weit von der API entfernen mag.
manche mögen es, gleich das ganze verzeichnis zu lesen, und dann ginge es.
aber wenn nachher ein iterator draus wird, muß man, um es stl-ähnlich zu halten, mit blabla.end() ja eh ein ungültiges objekt geben können.
ok, darfst NO_FILE benutzen. (aber ich hab ein ungutes gefühl dabei.)
-
Muss mal bei Amazon nach Büchern für Klassendesign suchen, finde das sehr interessant und will nicht jedesmal wegen jedem Mist hier nachfragen
MfG SideWinder
-
Der Rest wird ebenfalls bei Gelegenheit bearbeitet, die const bleiben aber.
Und *warum*?
-
Erstmal ist alles konstant und dann nimmt man die const weg wo man muss damit es auch funktioniert. Dann kann man so wenig wie möglich falsch machen.
Warum sollten sie also weg? Welchen Grund gibts dafür? "Es sieht nicht so gut aus" ist nicht gerade die Antwort
MfG SideWinder
-
Also ich meinte nur bei den Rückgabewerten.
Bsp: const bool up()
Das hat überhaupt keinen Sinn.
-
volkard schrieb:
ok, darfst NO_FILE benutzen. (aber ich hab ein ungutes gefühl dabei.)
doch nicht.
der iterator muß ja ein HANDLE haben und praktischerweise auch ein WIN32_FIND_DATA.
kannst wenn FindNext FALSE liefert, ruhig gleich FindClose machen und das handle invalidieren. dann kann man am wert des handles erkennen, ob man auf blabla.end() steht. kein bedarf für NO_FILE.
-
SideWinder schrieb:
Muss mal bei Amazon nach Büchern für Klassendesign suchen, finde das sehr interessant und will nicht jedesmal wegen jedem Mist hier nachfragen
wirst pech haben. aber falls du uml magst, das wirste in so büchern finden.
-
Also das Entwurfsmusterbuch und OOP für Dummies finde ich ziemlich gut, es geht
hier doch auch um das Klassendesign und dafür ist UML doch ausgelegt, und in
OOP für Dummies lernt man ja auch wie man das nacher in Code umsetzt, wobei man
hier ja eigentlich _nur_ noch die fertigen Methoden mit Code füllt.
-
SirLant schrieb:
hier doch auch um das Klassendesign und dafür ist UML doch ausgelegt
aber unbrauchbar. siehe thread "Informatiklehrer"
-
Toooom schrieb:
Also ich meinte nur bei den Rückgabewerten.
Bsp: const bool up()
Das hat überhaupt keinen Sinn.
bool foo() { return true; } //<--- ohne const int main() { foo()=false; }
> g++ -Wall -W -std=c++98 const_ret.cc const_ret.cc: In function `int main()': const_ret.cc:4: error: non-lvalue in assignment
vola. Das const ist dort so unnötig, wie das auto keyword
btw.
File (const WIN32_FIND_DATA& rData);
ich würde wenn du schon ein Wrapper schreibst die Datenstrukturen komplett wegwrappen und nicht mit so Win32 Strukturen arbeiten
*hust*boost::filesystem*hust*
-
Ich kann zwar nicht viel, aber dass mir das const beim Rückgabetyp nichts bringt weiß ich auch. Aber wie gesagt es ist eben mein Stil und drückt nochmals aus, dass der Rückgabewert konstant ist. Falls das irgendjemand nicht weiß und dein tolles Beispiel nicht gesehen hat
Frage: Was bringt -Wall bei g++?
Und wie soll ich die WIN32_FIND_DATA komplett wegwrappen? Ich mein irgendwie muss ich ja aus der Datenstruktur die mir FindFirstFile()/FindNextFile() gibt ein FileInfo-Objekt machen - was gibts da besseres als einen Konstruktor?
MfG SideWinder
-
mein tip: tu es nicht wegwrappen. aber geheimhalten in der klasse kannste es. und den ctor evtl private machen.