C ++ Primer 5th notas (capítulo 14 operación de sobrecarga y conversión de tipo) operadores de entrada y salida

1. Descripción general

Los operadores de entrada y salida deben ser funciones no miembros, de lo contrario, el operando en su lado izquierdo será un objeto de nuestra clase, como el siguiente código:

Sales_data data;
data << cout;
  • Dado que las operaciones de IO generalmente necesitan leer y escribir datos no públicos de la clase, los operadores de entrada y salida generalmente se declaran como amigos.
  • Los operadores de entrada deben manejar situaciones en las que la entrada puede fallar, mientras que los operadores de salida no.

2. Operador de salida <<

Descripción de parámetros:

  • El primer parámetro suele ser una referencia a un objeto ostream no constante. La razón es que escribir en la secuencia cambiará su estado; y la referencia es porque no podemos copiar un objeto ostream.
  • El segundo parámetro es una referencia constante del tipo a imprimir.
  • El valor de retorno es su parámetro ostream.

p.ej.

ostream &operator<<(ostream &os,const Sales_data &item)
{
    
    
    os<<item.isbn()<<" "<<item.units_sold<<""
    <<item.revenue<<" "<<item.avg_price();

    return os;
}

Nota: El operador de salida debe ser el principal responsable de imprimir el contenido del objeto en lugar de controlar el formato. El operador de salida no debe imprimir un carácter de nueva línea.

3. Operador de entrada >>

Descripción de parámetros:

  • El primer parámetro suele ser una referencia a la secuencia que leerá el operador
  • El segundo parámetro es una referencia al objeto (no constante) que se va a leer.
  • El valor de retorno es su parámetro istream.

p.ej.

istream &opertaor>>(istream &is,Sales_data &item)
{
    
    
    double price;// 不需要初始化,因为我们将先读入数据到`price`,之后才使用它

    is>>item.bookNo>>iten.units_sold>>price;
    //检查输入是否成功

    if(is)
    {
    
    
        item.revenue=item.units_sold*price;
    }else{
    
    
        item=Sales_data(); //输入失败:对象呗赋予默认的状态

    }
    return is;
}

Nota:

  • Cuando la transmisión contiene el tipo de datos incorrecto, la operación de lectura puede fallar y otros usos posteriores fallarán.
  • Cuando la operación de lectura llega al final del archivo o encuentra otros errores en el flujo de entrada, también fallará
  • Cuando ocurre un error en la operación de lectura, el operador de entrada debe ser responsable de recuperarse del error.

Supongo que te gusta

Origin blog.csdn.net/thefist11cc/article/details/113927916
Recomendado
Clasificación