This Pointer

Gast #4205283
Lesenswert?
• ▲
▼
Ich stehe leider vor einem kleinen Verständnis Problem...Kann mir an 
diesem Beispiel den This pointer erklären ?
1
Metro::Metro()
2
{
3
  
4
  this->interval_millis = 1000;
5
  
6
}
7

8

9

10
Metro::Metro(unsigned long interval_millis)
11
{
12
  
13
  this->interval_millis = interval_millis;
14
  
15
}
16

17

18
void Metro::interval(unsigned long interval_millis)
19
{
20
  this->interval_millis = interval_millis;
21
}
22

23
uint8_t Metro::check()
24
{
25

26
  unsigned long now = millis();
27
  
28
  if ( interval_millis == 0 ){
29
    previous_millis = now;
30
  return 1;
31
  }
32
 
33
  if ( (now - previous_millis) >= interval_millis) {
34
  #ifdef NOCATCH-UP
35
  previous_millis = now ; 
36
  #else
37
  previous_millis += interval_millis ; 
38
   #endif
39
    return 1;
40
  }
41
  
42
  return 0;
43

44
}
45

46
void Metro::reset() 
47
{
48
 
49
  this->previous_millis = millis();
50

51
}
Ich stehe leider komplett auf dem Schlauch was bewirkt der ?

Gruß
#4205854
Lesenswert?
• ▲
▼
hase schrieb:
> Der this-Pointer ist in dem Code überflüssig. In vielen Fällen wird er
> deshalb innerhalb einer Klasse nicht verwendet.

ist er nicht, da der Parameter genauso heißt.
Auch wenn ich das als schlechten Stil bezeichnen würde.

private member variablen kriegen nach den meisten Konventionen auch ein 
"m_" davor, dann würde sich auch die Namensdopplung erübrigen.

Es muss auch nicht schlechter Stil sein, das this explizit 
hinzuschreiben, Wenn dann sollte man es aber konsequent machen. Das hat 
den Vorteil, dass man sofort beim Code lesen weiß, das es ein member und 
keine lokale Variable ist.
Gast #4205951
Lesenswert?
• ▲
▼
Ich habe den this Pointer immer im Visual-Studio benutzt.
Man schreibt this-> und sofort öffnet sich eine Popup-Box mit allen 
Klassenvariablen. Ging schneller als im .H-File nachzuschauen.

Das this-> wurde dann wieder entfernt.

Member und Parameter gleich zu benennen finde ich auch unschön. Member 
bekommen noch ein m_ spendiert, dann sieht man sofort, was für eine 
Variable das ist.
#4206032
Lesenswert?
• ▲
▼
Das solte alles klären: (alles getestet)

C++
1
// x.hpp
2
class X {
3
 public:
4
  int y;
5
  void func();
6
};
7
//x.cpp
8
#include<iostream>
9
#include "x.hpp"
10
void X::func(){
11
  std::cout << this << ", " << &y << std::endl;
12
}
13
//main.cpp
14
#include<iostream>
15
#include "x.hpp"
16
int main(){
17
  X x;
18
  std::cout << &x << std::endl;
19
  x.func();
20
}

C:
1
// x.h
2
typedef struct X {
3
  int y;
4
} X;
5
void _ZN1X4funcEv(X*);
6
// x.c
7
#include<stdio.h>
8
#include "x.h"
9
void _ZN1X4funcEv(X* this){
10
  printf("%p, %p\n",this,&this->y);
11
}
12
// main.c
13
#include<stdio.h>
14
#include "x.h"
15
int main(){
16
  X x;
17
  printf("%p\n",&x);
18
  _ZN1X4funcEv(&x);
19
}

Kompiliren:
1
gcc x.c -c -o x.c.o
2
gcc main.c -c -o main.c.o
3
g++ x.cpp -c -o x.cpp.o
4
g++ main.cpp -c -o main.cpp.o
5
gcc main.c.o x.c.o -o c
6
g++ main.cpp.o x.cpp.o -o cpp
7
g++ main.cpp.o x.c.o -o quirx1
8
g++ main.c.o x.cpp.o -o quirx2
Ausfüren:
1
./c
2
./cpp
3
./quirx1
4
./quirx2
Ausgabe:
1
$ ./c
2
0x7ffc5200db40
3
0x7ffc5200db40, 0x7ffc5200db40
4
$ ./cpp
5
0x7ffe49cc4810
6
0x7ffe49cc4810, 0x7ffe49cc4810
7
$ ./quirx1
8
0x7ffc95566bb0
9
0x7ffc95566bb0, 0x7ffc95566bb0
10
$ ./quirx2
11
0x7ffee090a0a0
12
0x7ffee090a0a0, 0x7ffee090a0a0

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.