Source: https://websites.umich.edu/~eecs381/handouts/Operator_Overloading.pdf