Chapter 9 of Programming Principles and Practice Using C++ (Bjarne Stroustrup)