begin process at 2012 02 07 09:18:42
  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é :17 604 / 158

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) AFFICHAGE DE VALEUR PROVENANT D'U THREAD DANS UN FORMULAIRE par Nyuki
Source avec Zip Source avec une capture Source .NET (Dotnet) DESIGNER DE WORKFLOW WF4 WPF AVEC RIBBON OFFICE par jmenfous
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

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

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,527 sec (3)

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