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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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