Solving PDEs in C++: Numerical Methods in a Unified Object-Oriented Approach (Computational Science and Engineering)