Sería muy útil poder sobrecargar el. operador en C ++ y devuelve una referencia a un objeto.
Puedes sobrecargar operator->
y operator*
pero nooperator.
¿Existe una razón técnica para esto?
c++
operator-overloading
Ferruccio
fuente
fuente
operator.
yoperator.*
tiene algunos ejemplos..
están permitidos, por lo que quizás algún truco de despacho dinámico inteligente pero atroz que permita expresar el producto punto comomatrix1 . matrix2
.Respuestas:
Vea esta cita de Bjarne Stroustrup :
fuente
operator .
operator.
es un paralelo explícito conoperator->
. ¿Y cómo se puede sobrecargar la resolución?Stroustrup dijo que C ++ debería ser un lenguaje extensible, pero no mutable.
Se consideró que el operador de punto (acceso a atributos) estaba demasiado cerca del núcleo del lenguaje para permitir la sobrecarga.
Consulte El diseño y evolución de C ++ , página 242, sección 11.5.2 Referencias inteligentes .
El "yo" en esta cita es Bjarne Stroustrup. No puedes tener más autoridad que eso.
Si realmente quiere entender C ++ (como en "por qué es así"), debería leer este libro.
fuente
Stroustrup tiene una respuesta para esta pregunta :
fuente
Es muy fácil de entender, si pasa por el mecanismo interno de invocación de la función del operador, digamos que un complejo de clases puede tener dos miembros r para la parte real e i para la parte imaginaria. Diga Complex C1 (10,20), C2 (10,2) // asumimos que ya hay un constructor de dos argumentos dentro de la clase. Ahora, si escribe C1 + C2 como una declaración, el compilador intenta encontrar la versión sobrecargada del operador + en un número complejo. Ahora asumimos que sobrecargo + operador, por lo que C1 + C2 traducido internamente como c1.operador + (c2) Ahora supongamos que por el momento puede sobrecargar '.' operador. así que ahora piense en la siguiente llamada C1.disp () // muestra el contenido de un objeto complejo Ahora intente representarlo como una representación interna C1.operator. (------) , cosas completamente desordenadas creadas. Esa es la razón por la que no podemos sobrecargar '. operador
fuente
operator.