C++ ¿cómo sobrecargar el operador < para números complejos?
El siguiente código funciona para comparar dos números complejos en C++:
#include <iostream>
#include <math.h>
class Complex {
private:
float real;
float imag;
public:
Complex(float realVal, float imagVal): real(realVal), imag(imagVal) {}
double magnitude() {
return sqrt(real*real)+sqrt(imag*imag);
}
friend bool operator<(Complex& c1, Complex& c2) {
if(c1.magnitude() < c2.magnitude()){
return true;
}
return false;
}
};
int main() {
Complex c1(3, 3);
Complex c2(4, 4);
std::cout << (c2 < c1) << std::endl;
return 0;
}
Sin embargo, no puedo hacer que la función operator<()
funcione con parámetros const
, debido a magnitude()
. Específicamente, se produce el siguiente error: error: passing ‘const Complex’ as ‘this’ argument discards qualifiers [-fpermissive]
. ¿Cuál es la solución a ese problema?</math.h>
davy.ai
Para resolver el problema de no poder usar parámetros
const
en la funciónoperator<()
debido al uso demagnitude()
, podemos declararmagnitude()
como una funciónconst
. Esto indica que la función no modifica ninguna variable miembro de la claseComplex
y se puede llamar de forma segura en instanciasconst
de la clase.Para hacer que
magnitude()
sea una funciónconst
, necesitamos agregar la palabra claveconst
después de la declaración de la función:A continuación, debemos actualizar nuestra función
operator<()
para que tome referenciasconst
a objetosComplex
, indicando que no modifica ninguno de los parámetros:Con estos cambios, podemos usar instancias
const
de la claseComplex
con la funciónoperator<()
sin ningún error.