Why do you qualify the local members by this-> ?
That would normaly only be needed if there are local variables/parameters hiding the name.
You are checking the third member (which is a float) for equality, which is not a good idea generally, wouldn't
abs(three - rhs.three) < 0.0001
(or something like it with a more sensible value) be safer?
What differences besides the standard visibility of objects do you see in C++ between struct and class?