|
Trouver une ressource
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
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 !
Télécharger le zip
Sources de la même categorie
Commentaires et avis
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
|
|