Automatic Differentiation by OverLoading in C++