Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SURCHARGE D'OPÉRATEURS : TUTORIAL


Information sur la source

Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous : surcharge, operateur Niveau : Débutant Date de création : 27/11/2002 Date de mise à jour : 27/11/2002 18:37:13 Vu / téléchargé: 10 812 / 128

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Voici une petite source montrant comment surcharger un opérateur du type +, *, ... pour par exemple additioner deux objets d'une classe, ...

Pour cela j'ai pris l'exemple des nombres complexes ( partie réel, partie imaginaire )
 

Source

  • Below or in the zip
  • // project created on 27/11/2002 at 16:55
  • using System;
  • class MainClass
  • {
  • public static void Main(string[] args)
  • {
  • ClpComplexe C1 = new ClpComplexe();
  • ClpComplexe C2 = new ClpComplexe(5,3);
  • C1.Reel = 2;
  • C1.Imaginaire = -4;
  • Console.Out.WriteLine("C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
  • Console.Out.WriteLine("C2: " + C2.Reel + "+" + C2.Imaginaire + "j\n");
  • //Opération possible grâce à la surcharge de l'opérateur +
  • //ClpComplexe + ClpComplexe
  • ClpComplexe C3 = C1 + C2;
  • Console.Out.WriteLine("Old C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
  • //ClpComplexe + ClpComplexe
  • C1 = C2 + C3;
  • //ClpComplexe * ClpComplexe
  • ClpComplexe C4 = C2 * C3;
  • //ClpComplexe - Complexe où Complexe est un ClpComplexe déterminé par (int * ClpComplexe)
  • C4 = C4 - (2 * C1);
  • //Idem mais avec inversion des arguments
  • //ClpComplexe - Complexe où Complexe est un ClpComplexe déterminé par (ClpComplexe * int)
  • C4 = C4 - (C1 * 2);
  • Console.Out.WriteLine("C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
  • Console.Out.WriteLine("C2: " + C2.Reel + "+" + C2.Imaginaire + "j");
  • Console.Out.WriteLine("C3: " + C3.Reel + "+" + C3.Imaginaire + "j");
  • Console.Out.WriteLine("C4: " + C4.Reel + "+" + C4.Imaginaire + "j");
  • }
  • }
  • class ClpComplexe
  • {
  • private int iReel;
  • private int iImaginaire;
  • //Constructeur par défaut
  • public ClpComplexe()
  • {
  • this.iReel = 0;
  • this.iImaginaire = 0;
  • }
  • //Constructeur avec deux arguments
  • public ClpComplexe(int iReel, int iImaginaire)
  • {
  • this.iReel = iReel;
  • this.iImaginaire = iImaginaire;
  • }
  • //Propriété Reel
  • public int Reel
  • {
  • get
  • {
  • return this.iReel;
  • }
  • set
  • {
  • this.iReel = value;
  • }
  • }
  • //Propriété Imaginaire
  • public int Imaginaire
  • {
  • get
  • {
  • return this.iImaginaire;
  • }
  • set
  • {
  • this.iImaginaire = value;
  • }
  • }
  • //Surcharge de l'opérateur + pour pouvoir additionner deux nombres complexes
  • public static ClpComplexe operator +(ClpComplexe C1, ClpComplexe C2)
  • {
  • return new ClpComplexe(C1.Reel + C2.Reel, C1.Imaginaire + C2.Imaginaire);
  • }
  • //Surcharge de l'opérateur - pour pouvoir soustriare deux nombres complexes
  • public static ClpComplexe operator -(ClpComplexe C1, ClpComplexe C2)
  • {
  • return new ClpComplexe(C1.Reel - C2.Reel, C1.Imaginaire - C2.Imaginaire);
  • }
  • //Surcharge de l'opérateur * pour pouvoir multiplier deux nombres complexes
  • public static ClpComplexe operator *(ClpComplexe C1, ClpComplexe C2)
  • {
  • return new ClpComplexe((C1.Reel * C2.Reel - C1.Imaginaire * C2.Imaginaire),
  • (C1.Reel * C2.Imaginaire - C2.Reel * C1.Imaginaire));
  • }
  • //Surcharge de l'opérateur * pour pouvoir multiplier par iMultiple un nombre complexe
  • public static ClpComplexe operator *(int iMultiple, ClpComplexe C1)
  • {
  • return new ClpComplexe((iMultiple * C1.Reel), (iMultiple * C1.Imaginaire));
  • }
  • //Surcharge de l'opérateur * pour pouvoir multiplier par iMultiple un nombre complexe
  • public static ClpComplexe operator *(ClpComplexe C1, int iMultiple)
  • {
  • return new ClpComplexe((iMultiple * C1.Reel), (iMultiple * C1.Imaginaire));
  • }
  • }
Below or in the zip

// project created on 27/11/2002 at 16:55
using System;

class MainClass
{
	public static void Main(string[] args)
	{
		ClpComplexe C1 = new ClpComplexe();
		ClpComplexe C2 = new ClpComplexe(5,3);
				
		C1.Reel = 2;
		C1.Imaginaire = -4;		
		Console.Out.WriteLine("C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
		Console.Out.WriteLine("C2: " + C2.Reel + "+" + C2.Imaginaire + "j\n");
				
		//Opération possible grâce à la surcharge de l'opérateur +
		//ClpComplexe + ClpComplexe
		ClpComplexe C3 = C1 + C2;
		
		Console.Out.WriteLine("Old C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
		
		//ClpComplexe + ClpComplexe
		C1 = C2 + C3;
		//ClpComplexe * ClpComplexe
		ClpComplexe C4 = C2 * C3;
		//ClpComplexe - Complexe où Complexe est un ClpComplexe déterminé par (int * ClpComplexe)
		C4 = C4 - (2 * C1);
		//Idem mais avec inversion des arguments
		//ClpComplexe - Complexe où Complexe est un ClpComplexe déterminé par (ClpComplexe * int)
		C4 = C4 - (C1 * 2);
		
		Console.Out.WriteLine("C1: " + C1.Reel + "+" + C1.Imaginaire + "j");
		Console.Out.WriteLine("C2: " + C2.Reel + "+" + C2.Imaginaire + "j");
		Console.Out.WriteLine("C3: " + C3.Reel + "+" + C3.Imaginaire + "j");
		Console.Out.WriteLine("C4: " + C4.Reel + "+" + C4.Imaginaire + "j");
	}
}

class ClpComplexe
{
	private int iReel;
	private int iImaginaire;	
	
	//Constructeur par défaut
	public ClpComplexe()
	{
		this.iReel = 0;
		this.iImaginaire = 0;		
	}
	
	//Constructeur avec deux arguments
	public ClpComplexe(int iReel, int iImaginaire)
	{
		this.iReel = iReel;
		this.iImaginaire = iImaginaire;
	}
	
	//Propriété Reel
	public int Reel
	{
		get
		{
			return this.iReel;
		}
		set
		{
			this.iReel = value;
		}		
	}
	
	//Propriété Imaginaire
	public int Imaginaire
	{
		get
		{
			return this.iImaginaire;
		}
		set
		{
			this.iImaginaire = value;
		}		
	}
	
	//Surcharge de l'opérateur + pour pouvoir additionner deux nombres complexes
	public static ClpComplexe operator +(ClpComplexe C1, ClpComplexe C2)
	{
		return new ClpComplexe(C1.Reel + C2.Reel, C1.Imaginaire + C2.Imaginaire);
	}
	
	//Surcharge de l'opérateur - pour pouvoir soustriare deux nombres complexes
	public static ClpComplexe operator -(ClpComplexe C1, ClpComplexe C2)
	{
		return new ClpComplexe(C1.Reel - C2.Reel, C1.Imaginaire - C2.Imaginaire);
	}
	
	//Surcharge de l'opérateur * pour pouvoir multiplier deux nombres complexes
	public static ClpComplexe operator *(ClpComplexe C1, ClpComplexe C2)
	{
		return new ClpComplexe((C1.Reel * C2.Reel - C1.Imaginaire * C2.Imaginaire),
		                       (C1.Reel * C2.Imaginaire - C2.Reel * C1.Imaginaire));
	}
	
	//Surcharge de l'opérateur * pour pouvoir multiplier par iMultiple un nombre complexe
	public static ClpComplexe operator *(int iMultiple, ClpComplexe C1)
	{
		return new ClpComplexe((iMultiple * C1.Reel), (iMultiple * C1.Imaginaire));
	}
	
	//Surcharge de l'opérateur * pour pouvoir multiplier par iMultiple un nombre complexe
	public static ClpComplexe operator *(ClpComplexe C1, int iMultiple)
	{
		return new ClpComplexe((iMultiple * C1.Reel), (iMultiple * C1.Imaginaire));
	}
}

Conclusion

Avec :

class ClpComplexe
{
public int iReel;
public int iImaginaire;
}

si je fais C3 = C1 + C2; //où C1, C2 & C3 sont des objets ClpComplexe
alors cela ne marche pas car le programme ne sait pas comment additionner deux nombres complexes alors avec la surcharge de l'opérateur +, cela est possible.

//Surcharge de l'opérateur + pour pouvoir additionner deux nombres complexes
public static ClpComplexe operator +(ClpComplexe C1, ClpComplexe C2)
{
return new ClpComplexe(C1.Reel + C2.Reel, C1.Imaginaire + C2.Imaginaire);
}

De sorte qu'il sache comment additionner deux nombres complexes.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • AssemblyInfo.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 099 octets
  • Lp_SurchargeOp.cmbxTélécharger ce fichier [Réservé aux membres club]636 octets
  • Lp_SurchargeOp.pdbTélécharger ce fichier [Réservé aux membres club]15 872 octets
  • Lp_SurchargeOp.prjxTélécharger ce fichier [Réservé aux membres club]1 337 octets
  • Main.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 229 octets

Télécharger le zip

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

drole d'operateur [ par T103 ] bonjour a tous , je comprend po tres bien le role de ses deux operateur:~ et |si kelkun peu mexpliker sa sera simpomerci l'operateur ~ [ par T103 ] kelkun pourai til mexpliker la fonction de cet operateurmoi je comprend po trees bienmerci Surcharge de l'opérateur "[ ]" ... [ par LocalStone ] Bonjour ... J'ai une toute petite question un peu bête, mais j'arrive pas à trouver dans les documentations ... Comment peut-on surcharger Erreur : surcharge [ par woot6768 ] Bonjour,J'aimerais savoir, si quelqu'un veut bien m'expliquer, ce que sont les erreurs du genre :Aucune surcharge pour la méthode 'Trim' ne prend d'ar Surcharge des événements [ par fregolo52 ] Bonjour,Je suis en .NET 1.1J'essaie de faire un textbox personnalisé et je veux faire des actions à la prise du focus et à la sortie.Je surcharge donc Interface : propriété et surcharge ... [ par LocalStone ] Bonjour à tous ...Alors voilà ... Une petite question tout bête que je viens de me poser : est-ce qu'il est possible de définir dans une interface d'u surcharge [ par scortex84 ] Bonjour, J'ai crée un composant qui hérite d'un label. J'ai pu surcharger les évenements "onmousedown" et "onmouseup", mais je n'arrive pas à surcharg operateur mathematique [ par lyoan ] Bonjour a tous,Je voudrais effectuer cette oprération dans mon code :2^-6mais cela me donne comme résultat -8!!!!!!!Je suppose que cela vient de mon o surcharge des opérator [ par ull ] bonjour! int selection cdre_début et cadre_fin  déclarés dans structure selection, ils ont de type long.quand j'ai  mon code comme suit:if (sel Erreur de surcharge [ par Cyriusix ] Bonjour à tous,j'ai l'erreur suivante: Aucune surcharge pour la méthode 'ReleveMeteo' ne prend d'arguments '7'Ca m'indique la ligne suivante:DernierRe


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.