C ++ Primer 5e notes (opération de surcharge chap 14 et conversion de type) opérateurs d'entrée et de sortie

1. Description générale

Les opérateurs d'entrée et de sortie doivent être des fonctions non membres, sinon l'opérande sur leur côté gauche sera un objet de notre classe, tel que le code suivant:

Sales_data data;
data << cout;
  • Étant donné que les opérations d'E / S ont généralement besoin de lire et d'écrire des données non publiques de la classe, les opérateurs d'entrée et de sortie sont généralement déclarés comme amis.
  • Les opérateurs d'entrée doivent gérer les situations dans lesquelles l'entrée peut échouer, contrairement aux opérateurs de sortie.

2. Opérateur de sortie <<

Description du paramètre:

  • Le premier paramètre est généralement une référence à un objet ostream non constant. La raison en est que l'écriture dans le flux changera son état; et la référence est que nous ne pouvons pas copier un objet ostream.
  • Le deuxième paramètre est une référence constante du type à imprimer
  • La valeur de retour est son paramètre ostream.

par exemple.

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

    return os;
}

Remarque: L'opérateur de sortie doit être principalement responsable de l'impression du contenu de l'objet plutôt que de contrôler le format. L'opérateur de sortie ne doit pas imprimer un caractère de nouvelle ligne.

3. Opérateur d'entrée >>

Description du paramètre:

  • Le premier paramètre est généralement une référence au flux que l'opérateur lira
  • Le deuxième paramètre est une référence à l'objet (non constant) à lire.
  • La valeur de retour est son paramètre istream.

par exemple.

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;
}

Remarque:

  • Lorsque le flux contient le mauvais type de données, l'opération de lecture peut échouer et d'autres utilisations ultérieures échoueront
  • Lorsque l'opération de lecture atteint la fin du fichier ou rencontre d'autres erreurs dans le flux d'entrée, elle échouera également
  • Lorsqu'une erreur se produit dans l'opération de lecture, l'opérateur d'entrée doit être responsable de la récupération après l'erreur.

Je suppose que tu aimes

Origine blog.csdn.net/thefist11cc/article/details/113927916
conseillé
Classement