В чем отличие оператора -> от .(точки)?
a->b это более короткая запись для (*a).b

То есть, стрелка сочетает в себе разименовывание указателя и обращение к методу.

Ну и если a - это класс, то оператор стрелка может быть в нем определен по желанию автора класса.
Стрелка используется с указателями на класс/структуру, а точка со ссылками или с непосредственно экземпляром класса/структуры. Т.е. если вы попытаетесь использовать точку с указателем - получите синтаксическую ошибку.