Fehler im C++ Buch? (Anfänger)

R

rev

Aktives Mitglied
Thread Starter
Dabei seit
20.05.2005
Beiträge
719
Reaktionspunkte
15
Hi,
folgende Klass wird in einem Beispiel deklariert:

Code:
#include <iostream>
using namespace std;

class CWert{
	private:
	int val;
	public:
		CWert();
		void SetVal(int x) {val=x;}
		int GetVal()const {return val;}

};
CWert::CWert():
	val(0);
{};

int main (int argc, char * const argv[]) {
	CWert x;
	cout<< "Wert: "<<x.GetVal()"\n";	
    return 0;
}

Ich verstehe folgende Ausdrücke überhaupt nicht, das Buch schweigt:
Das const in Zeile 10
Der Variablenaufruf in Zeile 14. Warum wird hier einer Varieblen ein Parameter (0) übergeben? <- Hier meckert auch der compiler.
 
Ich würde mal eher sagen du hast falsch abgetippt ;)

Code:
#include <iostream>
using namespace std;

class CWert{
    private:
    int val;
    public:
        CWert();
        void SetVal(int x) {val=x;}
        int GetVal()const {return val;}

};
CWert::CWert(){
    val=0; // Variable mit 0 initialisieren
};

int main (int argc, char * const argv[]) {
    CWert x;
    cout<< "Wert: " << x.GetVal() << "\n";    
    return 0;
}

Zu "Const":

http://www.volkard.de/vcppkold/das_constspiel.html
 
Genau so kenn ich es auch. Ich habe nichts falsch abgetippt, an andere Stelle wird es erkärt (ist ein Schlechtes Buch, werd mir ein anderes Besorgen)

Elementvariablen lassen sich wohl entweder durch Zuweisung im Kontruktorrumpf Initialisieren, oder eben wie im Anfangspost. In meinem Post war lediglich das Semikolon in Zeile 15 falsch, dann gehts. Hier noch ein Beispiel aus dem Buch für eine Variableninitialisierung:

Code:
CAT():
itsAge(5),
itsWeight(8)
{}

Das Seimkolon war dann wohl wirklich ein Fehler im Buch, ohne gibts keine Fehler.
 
ups ... so geht es natürlich auch ;)
 
Wie heißt den das Buch?
 
"Jetzt lerne ich C++" (Markt+Technik)
Habe ich nur vorrübergehen ausgeliehen...
 
Eine Anmerkung zur Initalisierungsliste hätte ich noch:

Ich finde, man sollte sie benutzen wo immer es möglich und sinnvoll ist.

In der Initialisierungsliste legst du ja quasi nur fest, welcher Konstruktor für die jeweiligen Membervariablen aufgerufen werden soll. Das heisst natürlich, wenn du eine Membervariable nicht in der Initialisierungsliste initialisiert, sondern vielleicht irgendwo im Konstruktorrumpf, wird zusätzlich immer noch der Default-Konstruktor für diese Variable aufgerufen.

Das kostet nicht nur unnötig Rechenzeit, sondern kann in einigen Fällen auch eine böse Falle sein. :hehehe: Mit der Initialisierungsliste kannst du dir diesen unnötigen Aufruf sparen.
 
Zurück
Oben Unten