Its just, are you sure you need the same functionality more than once? Why not just have a function and assign the return value?
Ah, good point. The difference is in the utility of the class. If I have only the member function then an equation such as the following becomes impossible:
Vector3f negVec = -Normalize( other );
You have to write:
Vector3f otherNormalized = other;
otherNormalized.Normalize();
Vector3f negVec = -otherNormalized;
The point here is to avoid easy errors but also to prevent the C like verbosity required without the helper.
Writing "equations" be they based on float or a vector should not be "too" different given that the basic math operations are all the same. Results are completely different and an equation in one type of math is completely different in another but the idea is that: "a = 1+2 == 3" are writable in both cases, though in the case of vectors the result is actually {3, 3, 3}... This is a bit different than the "normalize" function but basically extending the concepts of floats to higher dimensions. Figuring out equations in 1D often expands to 3D, why should the math required be typed in differently?