Namens-Auflösung
-
Heute hab ich aber Fragen über Fragen

class Example { int i; Example (int i); void foo (int i); }; ... // Wird hier der Parameter i oder die Member-Variable i verwendet? void Example::foo (int i) { dosth(i); } // Und hier, erkennt der Compiler das? Weißt er member=member zu oder param=param? Example::Example (int i) : i(i) { }MfG SideWinder
-
Was spricht gegen selber ausprobieren?
-
So wie's scheint erkennt "er" das i = i member = param sein soll.
Ansonsten ist 'i' aber immer der Parameter.
Hab's so getestet:#include <iostream> class Example { public: int i; Example (int i); void foo (int i); }; Example::Example (int i) : i(i) { std::cout << "init " << i << std::endl; std::cout << "init (this)" << this->i << std::endl; } void Example::foo(int i) { std::cout << "old " << this->i << std::endl; std::cout << "kA " << i << std::endl; i = i; std::cout << "new " << i << std::endl << std::endl; } int _tmain(int argc, _TCHAR* argv[]) { Example ex(5); ex.foo(10); std::cin.get(); return 0; }Und der Output war:
init 5
init (this) 5 //Zeigt das es eine Zuweisung ist
old 5
kA 10 //Zeigt das i der "Parameter" ist.
new 10
-
genau darüber bin ich heute (ähh gestern) schonmal gesolpert. Habs aber Gott sei Dank bemerkt, bevor es überhaupt 'Schaden' anrichten konnte.
-
Konrad schrieb:
So wie's scheint erkennt "er" das i = i member = param sein soll.
Nicht ganz.. der Parameter verdeckt immer den Member, lediglich in der Initialisierungsliste ist die Qualifizierung nicht nötig, da du ja ohnehin nur Member initialisieren kannst.
Damit dein Code zu den Kommentaren passt müsste da "this->i = i" stehen.
-
bin verblüfft dass es nen int(int)-constructor gibt
aber:
it's good practice to
use the this-> for the initialisation of member-variables with parameters of the same name
-
rene1 schrieb:
bin verblüfft dass es nen int(int)-constructor gibt
aber:
it's good practice to
use the this-> for the initialisation of member-variables with parameters of the same nameVon wem stammt das Zitat? Du kannst dem mitteilen, dass das Unsinn ist, weil man bei der Initialisierung überhaupt kein this-> angeben kann.
-
Von wem stammt das Zitat? Du kannst dem mitteilen, dass das Unsinn ist, weil man bei der Initialisierung überhaupt kein this-> angeben kann.
In der Initialisierungsliste nicht, aber im Konstruktor-Body wohl:
class C { public: C(int x, bool b) { this->x = x; this->b = b; } private: int x; bool b; };Auch wenn die Init-Liste wohl besser ist:
C(int x, bool b) : x(x), b(b) { }
-
Th schrieb:
Von wem stammt das Zitat? Du kannst dem mitteilen, dass das Unsinn ist, weil man bei der Initialisierung überhaupt kein this-> angeben kann.
In der Initialisierungsliste nicht, aber im Konstruktor-Body wohl:
Da ist es aber nicht "good practice" sondern die einzige Möglichkeit.
-
Th schrieb:
In der Initialisierungsliste nicht, aber im Konstruktor-Body wohl:
Das ist dann aber keine Initialisierung, sondern eine Zuweisung.