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;
}
Opérateurs C ++ surcharge-entrée / sortie opérateurs
Je suppose que tu aimes
Origine www.cnblogs.com/aquariusunny/p/12729867.html
conseillé
Classement