Sé que puedo responder esta pregunta fácilmente generando el código y ver si se compila. Pero como no pude encontrar una pregunta similar, pensé que valía la pena compartirla. Supongamos que estoy sobrecargando el operador + de MyClass. ¿Puedo sobrecargarlo varias veces? Diferente sobrecarga para diferentes tipos. De esta manera:C++ múltiples sobrecargas de operador para el mismo operador
class MyClass{
...
inline const MyClass operator+(const MyClass &addend) const {
cout<<"Adding MyClass+MyClass"<<endl;
...//Code for adding MyClass with MyClass
}
inline const MyClass operator+(const int &addend) const {
cout<<"Adding MyClass+int"<<endl;
...//Code for adding MyClass with int
}
...
};
int main(){
MyClass c1;
MyClass c2;
MyClass c3 = c1 + c2;
MyClass c4 = c1 + 5;
}
/*Output should be:
Adding MyClass+MyClass
Adding MyClass+in*/
La razón por la que quiero hacer esto es que estoy construyendo una clase que yo quiero estar tan optimizado como sea posible. El desempeño es la mayor preocupación para mí aquí. Así que fundir y usar la caja del interruptor dentro del operador + función sobrecargada no es una opción. Si lo nota, hice las dos sobrecargas en línea. Supongamos por un segundo que el compilador en verdad indica mis sobrecargas, luego está predeterminado en tiempo de compilación qué código se ejecutará, y guardo la llamada a una función (al subrayar) + un escenario complicado de caso de conmutación (en realidad, habrá Más de 5 sobrecargas para el operador +), pero todavía puedo escribir código de lectura fácil usando operadores aritméticos básicos. Entonces, ¿obtendré el comportamiento deseado?
Si le preocupa el rendimiento, desde un punto de vista de clase, devolver '* this' a' const Myclass & 'será mejor. Ahora, desde el punto de vista del usuario (a menos que esté compilando en C++ 0x), debe usar '+ =' en lugar de '+' y '=' para evitar temporales inútiles que quizás no sean optimizados por un crappy compiladores. – paercebal
No tengo idea de por qué esto fue votado negativamente. Es una pregunta perfectamente válida.(El hecho de que encuentre esta información en otra parte no es razón para no encontrar la respuesta aquí también.) – sbi
@paercebal: Está implementando la suma a, no un incremento. Si él estaba implementando 'operator + =', entonces devolver una referencia estaría bien (después de modificar el estado interno), pero 'a + b' no pretende modificar el' a', sino que produce un tercer valor que difiere de ambos 'a' y' b'. –