Source: https://www.cs.utexas.edu/~scottm/cs312/handouts/slides/topic27_classes_objects_1.pdf