Source: https://ee.usc.edu/~redekopp/cs104/slides/L08a_OperatorOverloading.pdf