Marking a member function volatile is like marking it const; it means that the receiver object is treated as though it were declared as a volatile T*. Consequentially, any reference to x or y will be treated as a volatile read in the member function. Moreover, a volatile object can only call volatile member functions.
That said, you may want to mark x and y volatile anyway if you really do want all accesses to them to be treated as volatile.