In the following class definition:

```cpp
#include<iostream> 

class Test 
{ 
private: 
  int x; 
  int y; 

public: 
  Test(int x = 0, int y = 0) { this->x = x; this->y = y; } 
  Test &setX(int a) { x = a; return *this; } 
  Test &setY(int b) { y = b; return *this; } 
  void print() { cout << "x = " << x << " y = " << y << endl; } 

}; 

```

I don't understand why we should put an `*` in front of `this` in the `setX` or `setY` functions. I know `this` is a pointer to the current object and the `*` returns the pointed object, but since there is a `&` in the functions' return values, which means that the function returns a reference to a `Test` object. Then, shouldn't the return variable also be a reference (that is a pointer), like this:

```
Test &setX(int a) { x = a; return this; }

```

?

As an alternative, I believe

```
Test setX(int a) { x = a; return *this; }

```

would also be correct because the return value is not a pointer, but the pointed object, which of type `Test` (and not of type pointer to `Test`: `Test&`).

Why, if it's the case, are they not correct?