What about those other three classes?
Class IntExpr is pretty simple
Classes UnaryExpr and BinaryExpr both have to deal with subexpressions
Fortunately, we now have a way to deal with such subexpressions, namely class Expr itself!
Instead of storing pointers, we will store Expr objects, which are abstractions of pointers