Opérateurs C ++ surcharge-entrée / sortie opérateurs

  Pour être cohérent avec la bibliothèque standard IO, le premier paramètre de ligne de la fonction d'opérateur d'entrée et de sortie surchargée doit être la référence du flux et le deuxième paramètre de ligne est la référence de l'objet.
  
  S'il est surchargé en tant que fonction membre d'une classe, le premier paramètre de ligne doit être une référence à l'objet et le deuxième paramètre de ligne est une référence au flux.
  
  La méthode d'utilisation est ClassObj << cout, qui n'est pas cohérente avec la bibliothèque d'E / S standard, de sorte que les opérateurs d'entrée et de sortie ne peuvent pas être surchargés en tant que fonctions membres de la classe et peuvent être surchargés en tant que fonctions ami et fonctions ordinaires de la classe.
  
  Habituellement, le deuxième paramètre de ligne de l'opérateur de sortie surchargé est const, car la sortie d'une classe ne doit pas la modifier;
  
  mais le deuxième paramètre de ligne de l'opérateur d'entrée surchargé doit être non-const, sinon il ne peut pas être affecté.
  
  La méthode de base de surcharge est la suivante:
  
  bubuko.com, bubukou
  
  // opérateur de sortie surchargé
  
  ostream & operator << (ostream & out, const ClassType & obj)
  
  {
  
  out << / * ce que vous voulez sortir 1 * / << / * Ce que vous voulez sortir 2 * / << ...;
  
  return out;
  
  }
  
  // surcharger l'opérateur d'entrée
  
  istream & operator << (istream & in, ClassType & obj)
  
  {
  
  in >> / * ce que vous voulez entrer 1 * / >> / * Ce que vous voulez entrer 2 * / >> ...;
  
  // Vérifiez les erreurs et la possibilité de
  
  retour de fin de fichier dans;
  

  

  
  Exemple: La classe Persion utilise la fonction friend pour surcharger les opérateurs d'entrée et de sortie, et la classe PersionA utilise la fonction ordinaire pour surcharger les opérateurs d'entrée et de sortie.
  
  bubuko.com, 布布 扣
  
  #include <cstring>
  
  #include <iostream> en
  
  utilisant l'espace de noms std;
  
  classe Persion
  
  {
  
  public:
  
  // constructeur
  
  Persion (const char * pname, unsigned int ag, double he, double we): age (ag ), hauteur (he), poids (we) {strcpy (nom, pname);}
  
  // surcharge de l'opérateur: <<
  
  ami ostream & operator << (ostream & out, const Persion & ref)
  
  {
  
  out << ref.name << " \ t "<< ref.age <<" \ t "<< ref.height <<" \ t "<< ref.weight;
  
  return out;
  
  }
  
  // surcharge de l'opérateur: >>
  
  friend istream & operator >>
  

  

  
  unsigned int ag = 0;
  
  double he = 0;
  
  double we = 0;
  
  dans >> nom >> ag >> il >> nous;
  
  // vérifie que si les entrées ont réussi
  
  if (in)
  
  {// Input
  
  Succeeded strcpy (ref.name, name);
  
  ref.age = ag;
  
  ref.height = he;
  
  poids ref = nous;
  
  }
  
  else
  
  {// Échec de l'entrée
  
  }
  
  return in;
  
  }
  
  privé:
  
  nom de caractère [40];
  
  âge non signé;
  
  double hauteur;
  
  double poids;
  
  };
  
  classe PersionA
  
  {
  
  public:
  
  // constructeur
  
  PersionA (const char * pname, unsigned int ag, double he, double we): âge (ag), taille (he), poids (we) {strcpy (name, pname);}
  
  // GetData
  
  char * GetName (void) {return name;}
  
  unsigned int & GetAge (void) {return age;}
  
  double & GetHeight (void) {return height;}
  
  double & GetWeight (void) {return weight;}
  
  private:
  
  char name [40];
  
  âge non signé;
  
  double hauteur;
  
  double poids;
  
  };
  
  // surcharge de l'opérateur: <<
  
  ostream & operator << (ostream & out, PersionA & ref)
  
  {
  
  out << ref.GetName () << "\ t" << ref.GetAge () << "\ t" << ref. GetHeight () << "\ t" << ref.GetWeight ();
  
  revenir;
  

  

  
  istream & operator >> (istream & in, PersionA & ref)
  
  {
  
  char name [40] = {0};
  
  unsigned int ag = 0;
  
  double he = 0;
  
  double we = 0;
  
  dans >> nom >> ag >> il >> nous;
  
  // vérifie que si les entrées ont réussi
  
  if (in)
  
  {// Input
  
  Succeeded strcpy (ref.GetName (), name);
  
  ref.GetAge () = ag;
  
  ref.GetHeight () = he;
  
  ref.GetWeight () = nous;
  
  }
  
  else
  
  {// Échec de l'entrée
  
  }
  
  return in;
  
  }
  
  int main (void)
  
  {
  
  Persion per ("Jack", 20, 175, 65);
  
  cout << per << endl;
  
  cin >> per;
  
  cout << per << endl;
  

  
  cout << perA << endl;
  
  cin >> perA;
  
  cout << perA << endl;
  
  retourner 0;
  
  }

Je suppose que tu aimes

Origine www.cnblogs.com/aquariusunny/p/12729867.html
conseillé
Classement