All those if statements inside loops... would be a lot cleaner (and faster!) to just use a single goto statement:
goto cont;
for (; ; ++z)
for (; x <= z; ++x)
for (; y <= z; ++y) {
if (x*x + y*y == z*z) return *this;
cont:
}