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

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von rev, 10.03.2007.

  1. rev

    rev Thread Starter MacUser Mitglied

    Beiträge:
    714
    Zustimmungen:
    14
    MacUser seit:
    20.05.2005
    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.
     
  2. janosch

    janosch MacUser Mitglied

    Beiträge:
    1.298
    Zustimmungen:
    6
    MacUser seit:
    24.10.2003
    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
     
  3. rev

    rev Thread Starter MacUser Mitglied

    Beiträge:
    714
    Zustimmungen:
    14
    MacUser seit:
    20.05.2005
    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.
     
  4. janosch

    janosch MacUser Mitglied

    Beiträge:
    1.298
    Zustimmungen:
    6
    MacUser seit:
    24.10.2003
    ups ... so geht es natürlich auch ;)
     
  5. janosch

    janosch MacUser Mitglied

    Beiträge:
    1.298
    Zustimmungen:
    6
    MacUser seit:
    24.10.2003
    Wie heißt den das Buch?
     
  6. rev

    rev Thread Starter MacUser Mitglied

    Beiträge:
    714
    Zustimmungen:
    14
    MacUser seit:
    20.05.2005
    "Jetzt lerne ich C++" (Markt+Technik)
    Habe ich nur vorrübergehen ausgeliehen...
     
  7. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    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.
     
Die Seite wird geladen...

Diese Seite empfehlen