Operadores aritméticos y de comparación
Sobrecargue +, -, *, /, ==, < y operadores relacionados siguiendo las prácticas recomendadas.
Operadores aritméticos y de comparación es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Por qué sobrecargar operadores?
La sobrecarga de operadores permite que sus tipos se comporten como los tipos integrados: v1 + v2 se lee mejor que v1.add(v2). Utilícela para tipos de valor, como vectores, números complejos y dinero.
Definición de operator+
Puede sobrecargar + como miembro o como función libre. Las funciones libres son más simétricas.
struct Vec2 {
double x, y;
Vec2 operator+(const Vec2& other) const {
return {x + other.x, y + other.y};
}
};Forma de función libre
Una función libre otorga el mismo tratamiento a ambos operandos, lo que resulta útil cuando la conversión puede aplicarse a cualquiera de los dos lados.
Vec2 operator+(const Vec2& a, const Vec2& b) {
return {a.x + b.x, a.y + b.y};
}Operadores de asignación compuesta
Implemente primero += y después construya + sobre él. Este es el modismo canónico.
Vec2& operator+=(const Vec2& other) {
x += other.x;
y += other.y;
return *this;
}
Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
lhs += rhs;
return lhs;
}Operadores unarios
Algunos operadores son unarios: -x, +x, !x, ~x, ++x, --x.
Vec2 operator-() const { return {-x, -y}; }Incremento de prefijo frente a incremento de sufijo
El prefijo no recibe ningún parámetro; el sufijo recibe un int ficticio para distinguirlo.
Counter& operator++(); // prefix
Counter operator++(int); // postfixOperadores de comparación
Los operadores de comparación devuelven bool. Para mantener la coherencia, lo mejor es utilizar funciones libres.
bool operator==(const Vec2& a, const Vec2& b) {
return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }Menor que para ordenar
Si necesita ordenar su tipo o utilizarlo como clave de un mapa, defina operator<. Los demás operadores relacionales se derivan de él.
Operadores simétricos de tipos mixtos
Para admitir tanto 3 + vec como vec + 3, defina ambos operadores o utilice una función libre que realice la conversión.
Evite comportamientos inesperados
Los operadores sobrecargados deben comportarse de forma intuitiva. No redefina + para que signifique una resta. Respete el significado algebraico convencional del operador.
Operadores que no se pueden sobrecargar
Algunos operadores están fuera de los límites:
?:— ternario.— acceso a miembros (pero->se puede sobrecargar)::— resolución de ámbitosizeof,alignof,typeid
Comprobación rápida
¿Cuál es el patrón de implementación canónico para operator+ en un tipo definido por el usuario?
Resumen
La sobrecarga de operadores hace que los tipos definidos por el usuario se comporten de forma natural. Implemente primero la asignación compuesta y después la aritmética básica. Los operadores de comparación funcionan mejor como funciones libres. Respete la semántica convencional: las sorpresas son errores.
Preguntas frecuentes
¿La lección «Operadores aritméticos y de comparación» es gratis?
Sí — el texto completo de «Operadores aritméticos y de comparación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Operadores aritméticos y de comparación»?
Sobrecargue +, -, *, /, ==, < y operadores relacionados siguiendo las prácticas recomendadas. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Operadores aritméticos y de comparación»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Operadores aritméticos y de comparación
- Operadores de inserción y extracción de streams
- Operadores de subíndice y llamada a función
- Operador de comparación de tres vías en C++20