Source: https://home.csulb.edu/~pnguyen/cecs282/lecnotes/Overloading.pdf