Class Templates
Class templates allow us to apply the concept of parametric
polymorphism on a class-by-class basis.
Their purpose is to isolate type dependencies for a particular
class of objects.
Using class templates, we shift the burden of creating
duplicate classes to handle various combinations of data
types to the compiler.
Type dependencies can be found by looking for those types
that cause a particular class to differ from another class
responsible for the same kind of behavior.