Operadores de inserción y extracción de streams
Haga que sus tipos sean compatibles con std::cout mediante >.
Operadores de inserción y extracción de streams es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 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 << y >>
Haga que sus tipos sean interoperables con std::cout y std::cin sobrecargando los operadores de flujo.
El operador de inserción <<
Defínalo como una función libre que reciba un flujo de salida por referencia. Devuelva el flujo para permitir el encadenamiento.
struct Point { int x, y; };
std::ostream& operator<<(std::ostream& os, const Point& p) {
return os << "(" << p.x << ", " << p.y << ")";
}
Point p{3, 4};
std::cout << p << "\n"; // (3, 4)Por qué una función libre
Si lo escribiera como una función miembro, el operando izquierdo tendría que ser un Point, algo imposible porque necesitamos std::ostream a la izquierda. Las funciones libres admiten cualquiera de los dos órdenes.
El operador de extracción >>
Defínalo para leer de flujos de entrada. Valide los datos y establezca failbit si se produce un error.
std::istream& operator>>(std::istream& is, Point& p) {
char open, comma, close;
is >> open >> p.x >> comma >> p.y >> close;
if (open != '(' || comma != ',' || close != ')')
is.setstate(std::ios::failbit);
return is;
}Establecer el estado de error del flujo
Si el análisis falla, llame a is.setstate(std::ios::failbit). El código llamador puede detectar el error con !is o is.fail().
Declaraciones friend
Si el operador necesita acceder a miembros privados, declárelo como friend dentro de la clase.
class Point {
int x_, y_;
public:
friend std::ostream& operator<<(std::ostream& os, const Point& p);
};Tipos de flujo parametrizados
Para obtener la máxima portabilidad, parametrice el tipo de carácter. Esto resulta útil para los flujos de caracteres anchos.
template <typename CharT>
std::basic_ostream<CharT>& operator<<(
std::basic_ostream<CharT>& os, const Point& p) {
return os << "(" << p.x << ", " << p.y << ")";
}Encadenamiento
Devolver el flujo permite encadenar operaciones.
std::cout << "Result: " << point << ", distance: " << dist;Formato personalizado
Use std::ios::fmtflags o std::format de C++20 para aplicar un formato avanzado. Los flujos son más sencillos, pero más difíciles de localizar.
Salida con estilo JSON
Puede combinar distintas opciones de formato en su operador. Para salidas complejas, escriba funciones auxiliares.
Lectura de varias líneas
Use std::getline para leer por líneas y después analice los datos con un stringstream; así mantendrá simple su operator>>.
Consejo de rendimiento
Para el registro de muy alto rendimiento, prefiera bibliotecas específicas (spdlog, fmt), ya que superan considerablemente a los flujos.
Comprobación rápida
¿Por qué operator<< para un tipo definido por el usuario se define como una función libre en lugar de una función miembro?
Resumen
Sobrecargue operator<< y operator>> como funciones libres que reciban el flujo por referencia. Devuelva el flujo para permitir el encadenamiento. Establezca failbit cuando se produzcan errores de análisis. Use friend cuando necesite acceder a miembros privados.
Preguntas frecuentes
¿La lección «Operadores de inserción y extracción de streams» es gratis?
Sí — el texto completo de «Operadores de inserción y extracción de streams» 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 de inserción y extracción de streams»?
Haga que sus tipos sean compatibles con std::cout mediante >. 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 2 de 4.
¿Cuánto tiempo toma la lección «Operadores de inserción y extracción de streams»?
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