Accueil > > > SURCHARGE D'OPÉRATEURS : TUTORIAL
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.
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
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|