|
You last visited: Today at 09:53
Advertisement
[C++]Konstruktor Problem
Discussion on [C++]Konstruktor Problem within the C/C++ forum part of the Coders Den category.
07/29/2011, 15:35
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
[C++]Konstruktor Problem
Hallo ,
ich habe ein Problem bzw eher gesagt eine Frage zu meinem Code.
Ich habe mir eine schnuckelige Klasse angelegt die wie folgt aussieht:
PHP Code:
class Krieger
{
private:
char szName[30];
int iLeben;
int iKraft;
bool bWaffe; // 1 = Waffe, 0 = Keine Waffe
bool bSex; // 1 = Mann, 0 = Frau
public:
// Konstruktor //
Krieger(const char* Name, int Leben, int Kraft, bool Waffe, bool Sex);
Krieger(const char* Name, int Leben, int Kraft, bool Waffe);
Krieger(const char* Name, int Leben, int Kraft);
Krieger(const char* Name, int Leben);
Krieger(const char* Name);
Krieger();
// SET FUNKTIONEN //
void create_all( const char* Name, int Leben, int Kraft, bool Waffe, bool Sex);
// SHOW FUNKTIONEN //
void show_all();
};
So, ich habe natürlich auch alle Funktionen Definiert á la:
PHP Code:
void Krieger::create_all( const char* Name, int Leben, int Kraft, bool Waffe, bool Sex)
{
strncpy( szName, Name, sizeof(szName) -1);
szName[ sizeof(szName) ] = '\0';
iLeben = Leben;
iKraft = Kraft;
bWaffe = Waffe;
bSex = Sex;
}
PHP Code:
Krieger::Krieger(const char* Name, int Leben, int Kraft)
{
strncpy( szName, Name, sizeof(szName) -1);
szName[ sizeof(szName) ] = '\0';
iLeben = Leben;
iKraft = Kraft;
bWaffe = false;
bSex = false;
}
Krieger::Krieger(const char* Name, int Leben)
{
strncpy( szName, Name, sizeof(szName) -1);
szName[ sizeof(szName) ] = '\0';
iLeben = Leben;
iKraft = 45;
bWaffe = false;
bSex = false;
}
Krieger::Krieger(const char* Name)
{
strncpy( szName, Name, sizeof(szName) -1);
szName[ sizeof(szName) ] = '\0';
iLeben = 100;
iKraft = 45;
bWaffe = false;
bSex = false;
}
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
|
#2
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
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
|
#3
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
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
|
#4
|
elite*gold: 0
Join Date: Dec 2007
Posts: 14
Received Thanks: 2
|
Das hat SterminioProductions auf seinem Youtube-Channel doch detailliert erklärt.
|
|
|
07/29/2011, 17:44
|
#5
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
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
|
#6
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
Quote:
Originally Posted by Drake^
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
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
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
|
#8
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
Okay, danke Sm!th, endlich jemand der mir ne antwort auf meine kompliziert gestellte Frage gibt :P
|
|
|
All times are GMT +1. The time now is 09:54.
|
|