This text provides a comprehensive guide for the numerical solution of PDEs using C++ within an object-oriented approach. The high level of abstraction available in C++ is particularly useful in the implementation of complex mathematical objects, such as unstructured meshes, sparse matrices and multigrid hierarchies, often used in numerical modeling. Assuming only an elementary knowledge of calculus and linear algebra, the reader is given a full introduction to programming, PDEs and numerical methods. The learning process is illuminated further by practical examples alongside exercises and solutions that are found at the end of each chapter. This massively expanded second edition contains a wealth of new material, including sections on cryptography, image processing and solution of nonlinear PDEs, accompanied by new reader-friendly code. This book is ideal for students, engineers and researchers who want to use advanced numerical programming methods to solve problems in applied science and engineering.