El problema es que no obtienes lo que deseas porque al poner a++, hace post incremento, es decir, cuando acaba la función incrementa.
Si hacer una prueba tal que así:
int adiciona (int a, int b){
cout<<a<<endl;
a=a+b;
cout << "adiciona:a= "<<a<< endl;
return a;}
Verás como si pones a++, a en el primer cout vale 1 y si pones ++a, en el primer cout vale 2.