I tried to overload the dereference operators (`*`) and (`->`) for a simple class. 

```
class Base
{
private:
    int i;
    int j;

public:
    Base(int i): i(i), j(i), k(90) { }

    void print() 
    { 
        cout << i << j << endl; 
    }

    Base &operator*(void)
    {
        cout << "inside * operator" << endl;

        return *this;

    }

    Base *operator->(void)
    {
        cout << "inside -> operator" << endl;

        return this;
    }
};

int main()
{
    Base *b = new Base(100);

    int j = b->k;

    int l = (*b).k;

    cout << j << l<< endl;

    return 0;
}

```

Here the overloaded operator `->` does not get called. But when I use `int j = (*b)->k`, then the overloaded operator `->` gets called. 

I did not understand this why it is so? and also i didn't able to call overloaded `operator*` at all. I understand that we overload such operators mainly for smart pointers but i didnt get the reason here. any help???