C++ recap: “this” pointer
How classes work under the hood:
#include <iostream>
class Something
{
private:
  int id;
public:
  /* Something::Something(*const this, int _id) */
  Something(int _id) {
      setId(_id);
    }
  /* void setId(Something *const this, int _id) */
  void setId(int _id) { id = _id; }
  /* int getId(Something *const this) */
  int getId() { return id; }
};
int main() {
  Something sth(99);
  
  /* sth.setId(&sth, 44) */
  sth.setId(44);
  /* sth.getId(&sth) */
  std::cout << sth.getId() << std::endl;
}
Using 
#include <iostream>
class Calc
{
private:
  int value;
public:
  Calc() { value = 0; }
  Calc &add (int v) { value += v; return *this; }
  Calc &sub (int v) { value -= v; return *this; }
  Calc &mul (int v) { value *= v; return *this; 
}
  int getValue() { return value; }
};
int main() {
  int stackVariable;
  Calc c;
  c.add(10).sub(5).mul(5);
  std::cout << c.getValue() << std::endl;
}
/*
  Note that I need to return the address of the 
  current object (&*this) and NOT the address of 
  the this pointer to the object! (&this)
  (gdb) 
  Calc::add (this=0x7fff5fbffb00, v=10) at 4.this.cpp:11
  11	  Calc &add (int v) { value += v; return *this; }
  (gdb) p this
  $1 = (Calc * const) 0x7fff5fbffb00
  (gdb) p &this
  $2 = (Calc * const *) 0x7fff5fbffad8
  (gdb) p &*this
  $3 = (Calc * const) 0x7fff5fbffb00
*/