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