As far as I know according to the new C++ Standard the result should be equal to 49. According to C++ Standards before 2011 the code has undefined behaviour.
a*=++a;
you multiplied (a) by itself but not stored to (a) yet then (a) is added then stored to (a). The result of the operation before the equal sign is not stored till the operation after the = sign is performed. It is also equivalent to a = a * a + a;
correction:
Yes, that should be 49 as (a) would be incremented and stored then multiplied to itself..