Kalssen und Variablen

WorldRacer

Erfahrenes Mitglied
Klassen und Variablen

Hallo zusammen,

da ich neu in c++ bin hab ich mir ein paar bücher zu gelegt, weil ich das später (also nach der Schule, bin ja noch 16 ;-) ) ja beruflich machen möchte. Lese im Moment "C++ Programmierung lernen" von Andre Willms (Addison-Wesley) und bin begeistert.

Ich hoffe das war eine richtige Wahl von Visual Basic auc C++ um zu steigen. ICh denke man hat hier auch mehr Möglichkeiten.

So genug gequasselt, nun aber zur Frage:

Gibt es eine Möglichkeit zu Prüfen, ob eine Variable bereits initialisiert wurde?

Mein Quellcode sieht folgendermaßen aus:

Code:
class kSchwein
{
private:
	int groesse;
	int gewicht;
	int saettigung;

public:
	int aktGroesse(void);
	void vrnGroesse(int);

};
int kSchwein::aktGroesse(void) {
	return(groesse);
}
void kSchwein::vrnGroesse(int wachstumsrate) {
	if(groesse<0)
        {
		groesse=0;
	}
	cout << "Das Schwein waechst nun um " << wachstumsrate << "cm. " << endl;
	groesse= groesse + wachstumsrate;
}
int main(int argc, char **argv) 
{
	int wachstum;
	kSchwein kschwein;
	wachstum = 180;
	kschwein.vrnGroesse(wachstum);
	cout << "Das Schwein ist jetzt " << kschwein.aktGroesse() << "cm gross." << endl << endl;
	wachstum = 20;
	kschwein.vrnGroesse(wachstum);
	cout << "Das Schwein ist jetzt " << kschwein.aktGroesse() << "cm gross." << endl << endl;

return(0);
}

Ich möchte hier die Aktuelle Grösse eines Schweins kschwein ermitteln. Gut ist jetzt kein gutes Beispiel für meine momentane Überprüfung:

Code:
if(groesse<0) 
{
		groesse=0;
}

Denn rein theoretisch, abgesehen davon dass ein Schwein kein schwarzes loch ist, kann groesse ja auch in negative bereiche gehn...

Danke schonmal im Vorraus,

Marco
 
Zuletzt bearbeitet:
Hmm du kannst nicht herausfinden, ob eine Variable schon initialisiert wurde.

C++:
class Pig
{
    unsigned short    m_size;
    unsigned short    m_weight;

public:
    Pig(const unsigned int size = 10, const unsigned short weight = 500)
        : m_size(size), m_weight(weight)
    { std::clog << "Es ist ein neues Schwein geboren! (" << size << "cm groß und " << weight << "kg schwer)" << std::endl; }

    ~Pig()
    { std::clog << "Das Schwein ist gestorben!" << std::endl; }

public:
    const unsigned short size() const { return m_size; }
    void grow(const int);
};

void Pig::grow(const int size) 
{
    std::clog << "Das Schwein " << size < 0 ? "schrumpft" : "waechst" << " nun um " << size << "cm.\n";
    
    if (size < 0 && m_size < size) m_size = 0;
    else m_size += size;
}

C++:
int main() 
{
    Pig eberhard;
    eberhard.grow(20);
    std::clog << "Das Schwein ist jetzt " << eberhard.size() << "cm gross.\n\n";
    
    eberhard.grow(-10);
    std::clog << "Das Schwein ist jetzt " << eberhard.size() << "cm gross.\n\n";
}
... probier mal so :) Nen Konstruktor (+Initialisierungsliste) und Destruktor sollten dir ganz gut aushelfen.
 
k, Danke, dann werd ich mal das Kapitel zuende lesen, Kon- und Destruktoren kommen noch, dann schau ich mir den Code von dir mal richtig an.
 
Alles klar danke, habs jetzt verstanden....Aber wie funktioniert das mit der Elementinitialisierungsliste? Sry dass ich so viele Fragen stell, aber steige grad von Basic um. C++ ist echte Klasse aber auch ne dicke umgewöhung....
 
In der Elementinitialisierungsliste gibst du die Variablen an, die einen der Parameter als Wert zugewiesen bekommen.

Code:
class Pig
{
    unsigned short    m_size;
    unsigned short    m_weight;

public:
    Pig(const unsigned int size = 10, const unsigned short weight = 500)
        : m_size(size), m_weight(weight)
    { ... }

Hier in der Initialisierungsliste von dem Konstruktor werden eben die zwei Variablen m_size und _weight mit den Werten initialisiert, die als size und weight übergeben werden.

Code:
class Pig
{
    unsigned short    m_size;
    unsigned short    m_weight;

public:
    Pig(const unsigned int size = 10, const unsigned short weight = 500)
    {
        this->m_size = size;
        this->m_weight = weight;
    }

Das funktioniert so nicht immer, siehe: http://de.wikipedia.org/wiki/Initialisierungsliste
 
Zuletzt bearbeitet:
okay, dann ist also immer:


Die erste Variable in der klammer bekommt den wert der ersten ausserhalb der klammer,
Die 2. Variable in der klammer bekommt den wert der 2. ausserhalb der klammer,
Die 3. Variable in der klammer bekommt den wert der 3. ausserhalb der klammer,+
usw....
richtig
 
Zurück