https://www.cppbetterexplained.com/posts/cpp-operator-overloading/