Mi profesor de C++ piensa que el operador * en C++ estándar está "ya sobrecargado", ya que puede significar indirección o multiplicación según el contexto. Se puso esto desde C++ Primer Plus, que establece:¿El operador C++ * "ya está sobrecargado"?
En realidad, muchos de C++ (y C) los operadores ya están sobrecargados. Por ejemplo, el operador *, cuando se aplica a una dirección, arroja el valor almacenado en esa dirección. Pero aplicar * a dos números produce el producto de los valores. C++ usa la cantidad y el tipo de operandos para decidir qué acción tomar. (pg 502, 5ª ed)
Al menos otro libro de texto dice lo mismo. Hasta donde puedo decir, esto no es verdad; unario * es un operador diferente de binario *, y el mecanismo por el cual el compilador los desambigua no tiene nada que ver con la sobrecarga del operador.
¿Quién tiene razón?
Tienes razón. En cierto sentido, es justo decir que los operadores integrados ya actúan polimórficamente dependiendo de sus argumentos. Eso es polimorfismo estático – sehe
Tenga en cuenta que además de que hay dos operadores '*' (que es "sobrecarga" en el sentido inglés pero no en el sentido C++), el binario incorporado '*' en realidad también está sobrecargado en el sentido C++, en que se aplica a diferentes tipos - 'int',' double', etc. con diferentes efectos. El conjunto de sobrecargas efectivas para la resolución de sobrecarga del operador se define en la norma, en 13.6/12.Del mismo modo, unario '*' está efectivamente sobrecargado para cada tipo de puntero (13.6/6) y tipo de puntero a función (/ 7). –