begin process at 2010 02 10 06:32:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > SURCHARGE D'OPÉRATEURS : TUTORIAL

SURCHARGE D'OPÉRATEURS : TUTORIAL


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :13 391 / 145

Auteur : Bruto

Ecrire un message privé
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

Les Membres Club peuvent 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


 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) ENT LIB - VALIDATION BLOC DEMO par bernie666
Source avec Zip Source .NET (Dotnet) CRÉER UN ADDIN AUTOMATION POUR EXCEL par ShareVB
Source .NET (Dotnet) XML VERS TREENODE / TREENODE VERS XML par ip2x
Source avec Zip Source avec une capture Source .NET (Dotnet) NAVIGATION DANS UNE TABCONTROL par floptwo
Source avec Zip Source .NET (Dotnet) C# ET LE FRAMEWORK MAIS C'EST TRÈS SIMPLE ! ETAPE 2 PHASE 3 par bestmomo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) RECTANGLES par krissssss

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...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales