[C++]Konstruktor Problem

07/29/2011 15:35 .BritainAndy#1
Hallo ,

ich habe ein Problem bzw eher gesagt eine Frage zu meinem Code.
Ich habe mir eine schnuckelige Klasse angelegt die wie folgt aussieht:


So, ich habe natürlich auch alle Funktionen Definiert á la:


usw usw..

So wenn ich jetzt in meiner main 2 Objekte der Klasse 'Krieger' erstelle:

PHP Code:
Krieger yannik("yannik",30,50,true,false);
Krieger nils;

yannik.show_all();
nils.show_all(); 
Um zu testen ob der Standard Konstruktor klappt funktioniert alles.
Das Objekt "Nils" heißt bei der Ausgabe 'Mongo', hat '100 leben', '45 kraft' usw.
Alles wunderbar, aber was ist, wenn ich z.b. nur den 3ten Parameter des Konstruktors ändern will, und die anderen alle so bleiben sollen wie ich sie standardmäßig definiert habe?

Also something like this:

Krieger nils(,,,true,)
also 1t Parameter bleibt standard, 2ter auch, 3ter auch, aber den 4ten will ich ändern, wobei der 5te jedoch standard bleiben soll..


ich hoffe ihr versteht was ich meine, es fällt mir schwer mich klar auszudrücken :P

Lg, Andy
07/29/2011 15:53 xNopex#2
Neuen Setter:
Code:
void SetWeapon(bool b)
{
    this->bWaffe = b;
}
-->

Code:
Krieger nils;
nils.SetWeapon(true);
nils.SetWeapon(false);

btw.

Code:
strncpy( szName, Name, sizeof(szName) -1);
szName[ sizeof(szName) ] = '\0';
Das ist einfach nur schlecht und falsch. Du schreibst doch in C++, also nimm einfach std::string.
07/29/2011 16:33 .BritainAndy#3
Hm okay ich dachte ich kann das Problem auch irgendwie lösen, ohne neue Funktionen zu benutzen.
Danke trotzdem ;-)

Wieso schlecht und falsch? Es mag eventuell schlechter Programmierstil sein c strings zu benutzen, aber falsch?
07/29/2011 17:26 Drake^#4
Das hat SterminioProductions auf seinem Youtube-Channel doch detailliert erklärt.
07/29/2011 17:44 xNopex#5
Quote:
Wieso schlecht und falsch? Es mag eventuell schlechter Programmierstil sein c strings zu benutzen, aber falsch?
Code:
szName[ sizeof(szName) ] = '\0';
Außerhalb des Elementbereichs...

Nimm einfach std::string und gut ist..
07/29/2011 18:15 .BritainAndy#6
Quote:
Originally Posted by Drake^ View Post
Das hat SterminioProductions auf seinem Youtube-Channel doch detailliert erklärt.
Hat er nicht? Bzw, welches Video?
Ich weiß, dass ich mit funktionen die einzelnen Parameter "bearbeiten" kann, ich dachte aber, eventuell gibts auch ne möglichkeit das so zu machen:

PHP Code:
Krieger nils(,,,true,) oder
Krieger nils
(0,0,0,true,0
oder was weiß ich :P
aber das geht ja anscheinend nicht
07/29/2011 20:35 MrSm!th#7
Standardparameter.

Kannst im Konstruktor für jeden Parameter auch nen Standardwert setzen und wenn die ausgelassen werden, wird der Wert genommen.
Allerdings geht das nur am Ende. Du kannst keine Leerstellen in der Mitte oder am Anfang haben, eben höchstens so:

Code:
void func(int x = 0, int y = 0, int z = 0);

func(1);    //ok
func(1,2);    //ok
func(1,2,3);    //ok
func(,,1);    //falsch
07/29/2011 20:38 .BritainAndy#8
Okay, danke Sm!th, endlich jemand der mir ne antwort auf meine kompliziert gestellte Frage gibt :P