Konstruktoren - So Sinnvoll?
-
ups, ja wollte ich...
Ja, ungarische notation ist out, mach ich auch nicht mehr, aber um es flüssiger zu machen habe ich es so aus dem Tutorial übernommen.
Ja, mich hat es auch gewundert.. Vorallem kann ich so nicht sagen, das er zwar Leben hat, keine Waffe aber ein mann ist, da kein geeingneter Konstruktor vorhanden ist, da er ja nur 8 Möglichkeiten hat.
Wie wäre dein Lösungvorschlag nochma? Als Begriff, zum Googlen?!
-
9A-91 schrieb:
Wie wäre dein Lösungvorschlag nochma? Als Begriff, zum Googlen?!
Vor allem "YAGNI"!
Aber auch ein wenig "Default-Parameter".
-
Kann ich das schon lernen, oder brauch ich noch anderes, höheres Wissen dafür? Bin auf dem STand "Klassen, so olala, Vererbung geht noch Knapp, Funktionen eig ganz gut drauf bisher und den Wischiwaschi-For-While-Define-Krams kann ich auch...
-
9A-91 schrieb:
Kann ich das schon lernen, oder brauch ich noch anderes, höheres Wissen dafür?
Für YAGNI brauchst du überhaupt kein Vorwissen.
Werd dir erst einmal darüber klar, wie diese Klasse benutzt wird, und dann implementier nur die Konstruktoren, die du wirklich brauchst.
-
"YAGNI steht für “You Ain't Gonna Need It”, zu deutsch: „Du wirst es nicht brauchen“"
haha... Fettnäpfchen. Ja, aber wie löse ich den dann das Problemchen? Ich kann sogesehen ja 8*8 Möglichkeiten haben...
-
9A-91 schrieb:
Ich kann sogesehen ja 8*8 Möglichkeiten haben...
Kannst du. Aber hast du die wirklich?
YAGNI besagt, dass du dieser Klasse genau dann Konstruktoren verpasst, wenn du sie brauchst. So eine Klasse steht ja nicht allein auf der grünen Wiese, sie wird von anderem Code verwendet. Und werden da wirklich alle diese Kombinationen gebraucht? Oder vielleicht doch nur ein paar? Oder gibt es vielleicht noch gar keinen verwendenden Code? Dann schreib auch keine Konstruktoren.
-
Krieger::Krieger(const char* name=0, int leben=0, int kraft=0, bool waffe=true, bool zustand=true, bool sex=true) { if(name==0) name="Aussenseiter"; if(leben==0) leben=30; if(kraft==0) kraft=30; strncpy ( chName, name , sizeof(chName) -1); chName[sizeof(chName)] = '\0'; iLeben = leben; iKraft = kraft; bWaffe = waffe; bZustand = zustand; bSex = sex; }
Leider gibt es für den bool keinen guten Wert, um Ungültigkeit zu markieren.
Und ich weiß nicht, ob 0 Leben oder 0 Stärke ungültig ist.Krieger::Krieger(const char* name=0, int leben=-1, int kraft=-1, int waffe=-1, int zustand=-1, int sex=-1) //Weglassen hat eh wenig Sinn. Defaultparameter dokumentieren nur die //jeweiligen ungültig-Werte { if(name==0) name="Aussenseiter"; if(leben==-1) leben=30; if(kraft==-1) kraft=30; if(waffe==-1) waffe=true; if(zustand==-1) zustand=true; if(sex==-1) sex=true;//??? strncpy ( chName, name , sizeof(chName) -1); chName[sizeof(chName)] = '\0'; iLeben = leben; iKraft = kraft; bWaffe = waffe; bZustand = zustand; bSex = sex; }
Da muß man aber wieder viel am Handbuch hängen, wenn man weiterprogrammiert, weil das ungewöhnlich ist.
Oder sowas wie TriBool oder Optional...
Aber irgendwie tentiere ich dazu, nur einen Kuntruktor zu wollen und nur eine Art des Aufrufs. Weder Default-Parameter noch Überladungen.
-
Ist jetzt vielleicht ein bisschen viel verlangt, aber könntest du mir vielleicht ein BSP zeigen? Hab mir das grad mal angeguckt mit den Default-parametern, aber wie wende ich das auf mein BSP an?
Aber musst du nicht... Mein Hund muss nur grad mal ne große Runde miit mir machen
und dann versuch ich mal "Default-Paramter" anzuwenden... Oder sollte ich vorher classen komplett lernen? Weil bei Polymorphie und Kopierkonstruktoren hörts bei mir auf...
-
9A-91 schrieb:
Ich kann sogesehen ja 8*8 Möglichkeiten haben...
Ich komme anders auf 64, nämlich jeder der 6 Parameter kann da sein oder weg, macht 2^6=64 Möglichkeiten.
9A-91 schrieb:
Ja, aber wie löse ich den dann das Problemchen?
Gar nicht!
BeachteKrieger::Krieger(int leben);
und
Krieger::Krieger(int kraft);
Die beiden kann der Compiler nicht unterscheiden.
Krieger hans(17);//welcher Konstruktor solls denn sein?
Und
Krieger hans("Hans",35,Krieger::DefaultKraft,true,true,false);
-
9A-91 schrieb:
Oder sollte ich vorher classen komplett lernen? Weil bei Polymorphie und Kopierkonstruktoren hörts bei mir auf...
Am besten, der Kopierkonstruktor nimmt auch strncpy, löl.
Erstmal viel mehr lesen (und wohl besser andere Quellen nehmen). Auch wenn beim ersten mal lesen nur 5% hängen bleibt, das macht nix. Du brauchst unbedingt mehr Übersicht, weniger Planlosigkeit, mehr Perspektiven.