Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1812 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  comment déclarer un nouvel operateur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment déclarer un nouvel operateur ?

n°287822
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 18:14:40  profilanswer
 

Bonjour,
 
g déclaré un nouveau type : MYTYPE
je voudrais créer un nouvel opérateur pour pouvoir faire des opérations avec mes types. Comment faire ?
 
je voudrais pouvoir faire :
 

Code :
  1. MYTYPE Var1;
  2. MYTYPE Var2;
  3. // remplissage
  4. MYTYPE Res;
  5. Res = Var1 Oper Var2;


 
comment déclarer Oper pour pouvoir faire comme si c t une fonction ?
 
mci
bonne prog


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 16-01-2003 à 18:14:40  profilanswer
 

n°287828
Kristoph
Posté le 16-01-2003 à 18:22:48  profilanswer
 

Tu ne peux pas creer de nouveaux opérateurs en C++, mais tu peux utiliser les opérateurs existant.

n°287832
western
AJMM
Posté le 16-01-2003 à 18:28:19  profilanswer
 

il est aussi possible de surcharger certains opérateurs ... en les obligeant de faire ce qu'on veut ...

n°287839
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 18:59:36  profilanswer
 

Code :
  1. void * __cdecl operator new( unsigned int cb )
  2. {
  3.     // ...
  4. }


 
Ceci est tiré d'une source qui fonctionne si on enleve les lib par defaut dans vc++ 6.0
 
ce n'est pas la déclaration de l'operateur new ?


---------------
-( BlackGoddess )-
n°287841
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 19:03:38  profilanswer
 

ah ! a ce que je viens de voir on peut juste redéclarer les existants.
 
je voudrais redéclarer ^ et % (puissance et modulo) pour qu'ils fonctionnent avec mon type. Comment faire ?


---------------
-( BlackGoddess )-
n°287844
lapiou
fuji s602z
Posté le 16-01-2003 à 19:08:01  profilanswer
 

exemple :  
complexe operator "+"(complexe a,complexe b){};

n°287846
Kristoph
Posté le 16-01-2003 à 19:09:41  profilanswer
 

Il faut que ta nouvelle déclaration prenne en paramètre au moins 1 objet.
 
Exemple d'operateur + pour une classe BigInt :

Code :
  1. const BigInt operator + (const BigInt & a, const BigInt & b)
  2. {
  3.    BigInt resultat;
  4.    // Ici le code
  5.    return resultat;
  6. }


Message édité par Kristoph le 16-01-2003 à 19:13:44
n°287847
Taz
bisounours-codeur
Posté le 16-01-2003 à 19:09:45  profilanswer
 

lapiou a écrit :

exemple :  
complexe operator "+"(complexe a,complexe b){};

c'est là le future du C++, mais rien de standard, j'en ai juste vu dans des drafts du comité et dans des articles de BS

n°287848
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 19:11:12  profilanswer
 

avec "+" il me pond 6 erreurs,  
avec + il me sort qu'il doit au moins y avoir un operateur de type class


---------------
-( BlackGoddess )-
n°287850
antp
Super Administrateur
Champion des excuses bidons
Posté le 16-01-2003 à 19:12:11  profilanswer
 

BlackGoddess a écrit :


 
ce n'est pas la déclaration de l'operateur new ?


 
new existe déjà dans la base du C++ ...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 16-01-2003 à 19:12:11  profilanswer
 

n°287851
lapiou
fuji s602z
Posté le 16-01-2003 à 19:17:58  profilanswer
 
n°287852
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 19:18:10  profilanswer
 

bouarf je lache laffaire je v faire des fonctions plutot ...


---------------
-( BlackGoddess )-
n°287853
blackgodde​ss
vive le troll !
Posté le 16-01-2003 à 19:19:09  profilanswer
 

non en fait le lien explique bien je m'y remet :)


---------------
-( BlackGoddess )-
n°288785
Musaran
Cerveaulté
Posté le 18-01-2003 à 03:53:45  profilanswer
 

Version globale amie

Code :
  1. class MYTYPE{
  2. int value;
  3. public:
  4. friend const MYTYPE operator+(const MYTYPE&, const MYTYPE &); //autorise l'opérateur global à lire value privé
  5. }
  6. //opérateur global, les deux opérandes peuvent être des types dérivés de MYTYPE.
  7. const MYTYPE operator+(const MYTYPE& left_operand, const MYTYPE & right_operand){
  8. MYTYPE resultat;
  9. resultat.value = left_operand.value + right_operand.value;
  10. return resultat;
  11. }


Version membre

Code :
  1. class MYTYPE{
  2. int value;
  3. public:
  4. //opérateur membre, l'opérande gauche ne peut être que de type MYTYPE exactement.
  5. const MYTYPE operator+(const MYTYPE & right_operand){ //l'opérande gauche est implicitement *this
  6.  MYTYPE resultat;
  7.  resultat.value = this->value + right_operand.value; //this-> est optionnel
  8.  return resultat;
  9. }
  10. }


Utilisation

Code :
  1. MYTYPE a, b;
  2. a+b; //version sucrée
  3. operator+(a,b); //ce qui a vraiment lieu (cas friend)
  4. a.operator+(b); //ce qui a vraiment lieu (cas membre)


 
Fais attention avec ^, il est moins prioritaire que l'addition et même la comparaison, et cela ne peut se changer.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°288798
nraynaud
lol
Posté le 18-01-2003 à 05:54:43  profilanswer
 

western a écrit :

il est aussi possible de surcharger certains opérateurs ... en les obligeant de faire ce qu'on veut ...


Non, non, non, pas "ce qu'on veut", on prolonge leur fonctionnement habituel sur des nouveaux objets, par exemple, prolonger + sur des vecteurs (addition membre à membre), c'est bon, mais on fait pas n'improte quoi, ne serait-ce qu'à cause des priorités et associativités fixes mais surtout pour la qualité (et donc, entre autre la lisibilité du code)
ex :
b^c=a  
si je te dis que j'ai défini ^ comme affectation pour mon type et = comme une loi de groupe, à la relecture, c'est pas hyper évident et la qualité baisse inévitablement.
 
Préservez un maximum des propriétés de vos opérateurs. Et utilisez des fonctions qui sont largement plus lisibles et moins casse-gueules.

n°288823
blackgodde​ss
vive le troll !
Posté le 18-01-2003 à 11:55:56  profilanswer
 

merci pour toutes ces explications :)


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  comment déclarer un nouvel operateur ?

 

Sujets relatifs
comment declarer une list int[delphi] débutant : Déclarer une API
[JS] Comment déclarer une constante globale?Commment déclarer une variable utilisable ds tout le projet ???
Comment declarer un tableau array a 2 dimension[ASM,C] Qui c'est qui veut programmer un nouvel OS libre ?
Comment faire l'opérateur "différent" sous VBA...[MFC] CAsynSocket: comment déclarer (exemple)
operateur new de placement.Déclarer une procédure locale à un évènement
Plus de sujets relatifs à : comment déclarer un nouvel operateur ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR