Coutez et cinez vous propre classes!

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 649 fois - Téléchargée 33 fois

Contenu du snippet

C'est une petite source qui permet de surcharger les opérateurs << et >> des classes iostream pour lui faire afficher ce que vous voulez. Donc, au lieu de créer une fonction membre du genre CFRAC::Afficher() qui afficerait la fraction, il est possible de faire cout << mafraction; ou cin >> mafraction;

Source / Exemple :


#include <iostream.h> //pour les flux d'E/S
#include <windows.h> //pour ralentir la compilation ;)

//la classe de Fraction (rien de bien compliqué)
struct CFrac
{
	int den; //denominateur
	int num; //nominateur
	CFrac(int Sden, int Snum)
	{
		num = Sden;
		den = Snum;
	}

};

//on surcharge l'opérateur >> pour fonctionner avec des operateurs
//istream (comme tous les flux d'entree) et CFrac
istream& operator>>(istream& tampon, CFrac& frac)
{
	char VariableTrouQuiSertJusteABoufferUnCaractere; //sa s'explique
	//on extrait les nombres du flux, s'assurant d'enlever la / qui sert a rien
	tampon >> frac.num >> VariableTrouQuiSertJusteABoufferUnCaractere >> frac.den;
	//on retourne une référence afin de permettre le chainage
	return tampon;

}
//on surcharge l'opérateur << pour fonctionner avec des operateurs
//ostream (comme tous les flux de sortie) et CFrac
ostream& operator<<(ostream& tampon,CFrac& frac)
{
	//on insère les donnees a afficher dans le tampon de sortie
	tampon << frac.num << "/" << frac.den;
	//on retourne une référence afin de permettre le chainage
	return tampon;
}

void main()
{
	//on crée 3 fractions;
	CFrac fraction1(5,2), fraction2(3,5),fraction3(5,1000);
	//on les affiche sans problème
	cout << fraction1 << "\t" << fraction2 << "\t" << fraction3 << endl;
	cout << "Entrez 3 fractions sous forme de num/den num/den num/den" << endl;
	//on les recoit sans problème
	cin >> fraction1 >> fraction2 >> fraction3;
	//on les raffiche sans problème
	cout << fraction1 << "\t" << fraction2 << "\t" << fraction3 << endl;
	
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
20 février 2008

Ah enfin un code d'exemple pour la surcharge de << et >>.
Je t'en remercie ! Cependant, je l'ai fait avec une classe... c'est pas des plus compliqué de le faire avec ;)
Messages postés
20
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
8 avril 2004

La seul raison pour laquelle j'ai fait des struct c'est justement pour éviter les fonctions amies (c'est plus simple)
Messages postés
77
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
16 juin 2004

Salut Athanor,
Ton prog marche apparemment bien (je dis ça car je ne l'ai pas testé).
Je t'écris pour te faire deux petites (tres petites) remarks.
Tout d'abord, je voulais juste signaler que l'utilisation d'une classe avec "struct" est tres peu utilisé car peu d'interêt. La seule grosse différence est qu'en utilisant "struct" les membres sont par defaut d'acces 'public' alors qu'en utilisant "class" les membres sont par defaut d'acces 'private'. Cette structure a juste été gardée pour pouvoir compiler des prog en C. ça aurait été sympa que tu mettes un NB style: "j'ai utilisé "struct" pour ma classe mais en général il est recommandé d'utiliser "class"... "!
Pour ce qui est de la surdéfinition des 2 op << et >>, il aurait été plus clair d'utiliser des fonctions amies... En fait il faut just que tu declare dans ta classe en public: "friend ostream& operator<<(ostream& tampon,CFrac& frac)"
Je sais que les fonctions amies sont tres peu utilisées mais pourtant on un interet certain pour quelques cas comme celui-la ou par exemple pour la surdefinition de l'operateur '+'...
Mis a part ces 2 remarks ki ne sont ke des remarks (et non des erreurs), je te felicite d'avoir commenté ton code car peu de personnes le font ( dont moi le premier )!!!
Bon dev,
H@ldwin.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.