Benutzerdefinierte Suche

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

  1. rev

    rev Thread StarterMacUser Mitglied

    Mitglied seit:
    20.05.2005
    Beiträge:
    715
    Zustimmungen:
    14
    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

    janoschMacUser Mitglied

    Mitglied seit:
    24.10.2003
    Beiträge:
    1.305
    Zustimmungen:
    6
    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
     
    janosch, 10.03.2007
  3. rev

    rev Thread StarterMacUser Mitglied

    Mitglied seit:
    20.05.2005
    Beiträge:
    715
    Zustimmungen:
    14
    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

    janoschMacUser Mitglied

    Mitglied seit:
    24.10.2003
    Beiträge:
    1.305
    Zustimmungen:
    6
    ups ... so geht es natürlich auch ;)
     
    janosch, 10.03.2007
  5. janosch

    janoschMacUser Mitglied

    Mitglied seit:
    24.10.2003
    Beiträge:
    1.305
    Zustimmungen:
    6
    Wie heißt den das Buch?
     
    janosch, 10.03.2007
  6. rev

    rev Thread StarterMacUser Mitglied

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

    autoexec.batMacUser Mitglied

    Mitglied seit:
    21.01.2005
    Beiträge:
    2.113
    Zustimmungen:
    20
    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.
     
    autoexec.bat, 10.03.2007
Die Seite wird geladen...