parameterkonstruktor failt



  • Hi, der wert der ausgegeben wird ist nicht 5 sonder -xxxxxxxx. warum

    #include <iostream>
    
    using namespace std;
    
    class test {
    
    public:
    
    int max;
     test (int max) {
    	 max=max;
    }
    
     	 test (){
    	 cout << "";
     }
    
    	void druckezeiger () {
    		cout << this << endl;
    	}
    };
    
    int main () {
    
    	int hallo = 5;
    	test test(hallo);
    
    	cout << test.max << endl;
    
    	system ("PAUSE");
    }
    

  • Mod

    Du hast wohl ein Faible dafür alle Namen recht zweideutig zu verteilen?

    test (int max) { 
         max=max; 
    }
    

    Hier weist du dem Parameter seinen eigenen Wert zu.
    Du hast das wohl von Initialisierungslisten abgekuckt bei denen es in der Tat klappt:

    test (int max) : max(max) {}
    

    Das liegt aber an einer speziellen Regelung nur für Initialisierungslisten.



  • Pissnoob schrieb:

    Hi, der wert der ausgegeben wird ist nicht 5 sonder -xxxxxxxx. warum

    #include <iostream>
    
    using namespace std;
    
    class test {
    
    public:
    
    int max;
     test (int max) {
    	 max=max;
    }
    
     	 test (){
    	 cout << "";
     }
    
    	void druckezeiger () {
    		cout << this << endl;
    	}
    };
    
    int main () {
    
    	int hallo = 5;
    	test test(hallo);
    
    	cout << test.max << endl;
    
    	system ("PAUSE");
    }
    

    wenn eine Memberfunktion eine lokale Variable (oder Parameter) mit dem selben Namen wie eine Membervariable hat, dann kannst Du nicht mehr so einfach auf die Membervariable zugreifen. Korrekt wäre dann:

    this->max = max;
    

    Was denkt Du denn woher soll Dein Compiler wissen, daß bei

    max = max;
    

    das erste max Deine Membervariable und das zweite max Dein Funktionsparameter sein soll?

    mfg Martin



  • Versuche gleiche Namen innerhalb eines Scopes soweit wie möglich zu vermeiden.
    Das führt nur zu schlecht lesbaren Code und unnötiger Verwirrung.

    In deinem Fall macht eine Konstruktor Initialisierung auch keinen Sinn.
    Benutze wann immer möglich die Initialisierungsliste und nicht die Konstruktorinitialisierung.


Anmelden zum Antworten