Descripción del artículo de la serie.
Esta serie de artículos relacionados con C ++ es solo para las notas de estudio del autor. ¡Utilizaré mi propio conocimiento para registrar el estudio! La serie de aprendizaje de C ++ se dividirá en tres etapas: conceptos básicos, STL y estructuras y algoritmos de datos avanzados . Los contenidos clave relevantes son los siguientes:
- Conceptos básicos : clases y objetos (que involucran las tres características principales de C++, etc.);
- STL : aprenda a utilizar las bibliotecas relacionadas con STL proporcionadas por C++ ;
- Algoritmos y estructuras de datos de alto orden : implemente manualmente su propia biblioteca STL y diseñe e implemente estructuras de datos de alto orden , como árbol B, árbol B +, árbol rojo-negro, etc.
Conjunto de estudio:
Directorio de artículos
Prefacio
- El método de escritura de funciones sobrecargadas de operadores es relativamente fijo. En el número anterior, el autor lo presentó, diseñó e implementó
关系运算符的重载(点击跳转)
para resolver la comparación de tipos / objetos personalizados. - En este artículo, el autor compartirá con usted los
自定义类型 / 对象
problemas de entrada y salida de! Es decir:重载 C++ 输入输出运算符
.
1. Problemas con la entrada y salida de tipos personalizados
Como se muestra a continuación: Consejo: ¡No hay operadores de entrada/salida que coincidan con estas operaciones! C ++ en sí solo admite la entrada y salida básica de tipos de datos integrados. Para nuestros tipos implementados de forma personalizada (como clase de tiempo, clase de información del estudiante, etc.), se requiere una sobrecarga personalizada.
>>
: Operador de entrada de flujo; [archivo de encabezado: istream; en el espacio de nombres estándar]<<
: Operador de salida de flujo; [archivo de encabezado: ostream; en el espacio de nombres estándar]
2. Sobrecarga de operadores de entrada y salida en C++ (tomando la clase de fecha como ejemplo)
1. Marco básico de la clase de tiempo.
El código es el siguiente (ejemplo):
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
class Date {
public:
Date(int year = 1970,int month = 1, int day = 1)
:_year(year),_month(month),_day(day)
{
}
void Print() {
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
2. ¡Instrucciones de sobrecarga de entrada y salida!
流输入
y流输出
también son objetos en sí mismos, correspondientes a:istream 类
yostream 类
(con respecto a problemas de flujo de datos, ¡los compartiré en contenido posterior!)
返回值类型即:istream / ostream
- ¡También presentado en artículos anteriores! Dado que la sobrecarga de entrada y salida puede estar restringida por el limitador de alcance de la clase, generalmente se implementa en forma de funciones amigas.
友元介绍:friend 友元四连问(点此查看)
.
3. Ejemplo de sobrecarga de entradas y salidas
El código es el siguiente (ejemplo): ¡presta atención a los comentarios en el código!
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
using std::istream; /* 注意此处! */
using std::ostream; /* 注意此处! */
class Date {
public:
Date(int year = 1970,int month = 1, int day = 1)
:_year(year),_month(month),_day(day)
{
}
void Print() {
cout << _year << "-" << _month << "-" << _day << endl;
}
/* 流输入输出的重载:注意两个函数的第二个参数写法! */
friend ostream& operator << (ostream& out, const Date& d);
friend istream& operator >> (istream& in, Date& d);
private:
int _year;
int _month;
int _day;
};
/* 流输入输出的重载 */
inline ostream& operator << (ostream& out, const Date& d) {
out << d._year << "年" << d._month << "月" << d._day << "日" << endl;
return out;
}
inline istream& operator >> (istream& in, Date& d) {
in >> d._year >> d._month >> d._day;
return in;
}
Ejemplo de resultados en ejecución (abajo)
Artículos relacionados
1. [Capítulo básico de C++: 21]: amigo Los amigos hicieron cuatro preguntas: ¿Qué es un amigo? ¿Clase de amigos? ¿Función de amigo? ¿Cuándo usar amigos?
2. [Conceptos básicos de C++: 22]: Objetos constantes y funciones/métodos de miembros constantes de clases y problemas comunes que involucran const en clases.
3. [Conceptos básicos de C++: 23]: [Plantilla importante] Diseño e implementación de sobrecarga de operadores relacionales: [ > , < , >= , <= , != , == ] sobrecarga [tomando la clase Fecha y hora como ejemplo]