23. oktober 2003 - 21:41
Der er
25 kommentarer og 1 løsning
Hvad gør this
Hey I en bog jeg er i gang med blev der nævnt noget med en this-pointer. Jeg ved godt at this er et keyword men hvad bruges det til?
Annonceindlæg fra NetNordic
23. oktober 2003 - 21:43
#1
this refererer til det aktuelle objekt.
23. oktober 2003 - 21:44
#2
23. oktober 2003 - 21:45
#3
F.eks. kunne this bruges sådan: void dostuff(int x) { this->x = x; } Så opstår der ikke problemer med at se hvilken variabel der refereres til.
23. oktober 2003 - 21:45
#4
har du et link til et sted hvor jeg kan læse det. Gerne med eksempler... this->g(); er ikke noget jeg har set før
23. oktober 2003 - 21:46
#6
Det betyder bare at metoden g() udføres i det aktuelle objekt.
23. oktober 2003 - 21:46
#7
Den bruger da altid den lokale...
23. oktober 2003 - 21:49
#8
Er totalt forvirret :(
23. oktober 2003 - 21:50
#9
23. oktober 2003 - 21:52
#10
23. oktober 2003 - 21:54
#11
F.ex: class X; class Y { public: Y(X *x) { my_x = x; } X *my_x; }; class X { public: X() : y(this) // Giv min y en pointer til mig {} Y y; int p; };
23. oktober 2003 - 22:07
#12
En slem gang spagetti (konverteret fra C#): #include <iostream> using namespace std; class A; class B { private: A *a; public: B(A *a); void foobar(); }; class A { private: B *b; public: int v; A(int v = 0); void foobar(); }; B::B(A *a) { this->a = a; // argument shadows for instance member } void B::foobar() { cout << a->v << endl; } A::A(int v) { this->v = v; // argument shadows for instance member b = new B(this); // pass itself as argument } void A::foobar() { b->foobar(); } int main() { A *a1 = new A(123); a1->foobar(); A *a2 = new A(); a2->foobar(); return 0; }
23. oktober 2003 - 22:11
#13
har forstået det nu. Lige en lille ting der stadig undrer mig void f() const;// Detteher med const efter funktionen void g(); this->g() //ulovligt g er ingen konstantfunktion og så det med at man ikke kan gøre det med g.
23. oktober 2003 - 22:16
#14
void f() const; const i denne sammenhæng betyder "jeg lover ikke at ændre på objektets tilstand"
23. oktober 2003 - 22:16
#15
pointen er at f kan kaldes på objekter der er const men det kan g ikke (man kan jo ikke ændre på et const objekt)
23. oktober 2003 - 22:17
#16
så. public: int a; void g() const { a=4; cout<<"Jeg løj :D"; } Hvorfor kan man så ikke sige this-> til en ikke const
23. oktober 2003 - 22:20
#17
Jeg tror at den der vil give dig en compile fejl "syntax error - lying code" når du compiler koden.
23. oktober 2003 - 22:21
#18
Det sidste spørgsmål forstod jeg ikke.
23. oktober 2003 - 22:23
#19
class ZZ { private: int v; public: ZZ() { v = 0; } void foobar1() { v++; } void foobar2() const { v++; } }; C:\>g++ -c zz.cpp -o zz.obj zz.cpp: In member function `void ZZ::foobar2() const': zz.cpp:13: increment of data-member `ZZ::v' in read-only structure
24. oktober 2003 - 15:48
#20
mener denneher: void f() const; void g(); this->g() //ulovligt g er ingen konstantfunktion Det står i en bog jeg er i gang med
24. oktober 2003 - 15:51
#21
Er det kald i en constructor ?
24. oktober 2003 - 15:54
#22
nej. f og g er interfacefunktioner i en klasse
24. oktober 2003 - 15:59
#23
Det tror jeg ikke er rigtigt. Generelt. Kun hvis this er et const objekt.
25. oktober 2003 - 00:33
#24
class ZZ { private: int v; public: ZZ() { v = 0; } void foobar1() { v++; } void foobar2() const { //v++; } void foobar3() { this->foobar1(); this->foobar2(); } void foobar4() const { //this->foobar1(); this->foobar2(); } }; De 2 udkommenterede linier compiler ikke - de andre gør.
26. oktober 2003 - 10:43
#25
Gider i ikke smide et svar så jeg kan lukke og slukke?
26. oktober 2003 - 12:12
#26
svar (selvom jeg kom lidt sent ind i tråden)
Kurser inden for grundlæggende programmering