Surcharge d'opérateurs

Signaler
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
-
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
-
Salut les amis,

Je voulais savoir si c'étais possible de faire des surcharge d'opérateurs sans utiliser les classes ?

C'est pour faire des calculs sur des structures.

J'ai un peu chercher sur le site mais les réponses ne sont que dans les classes, donc ce n'est pas ce que je cherche.



Merci de votre attention.

Le CyberMonde nous offre une meilleur qualité de vie ["http://cyberman.inc.free.fr" CyberMan.inc The WebSite]

4 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Seul les opérateurs asymétriques comme += ou autre de ce genre sont des fonctions membres. Les opérateurs comme +/-/* doivent normalement etre définie en tant que fonction à part entière et souvent déclaré friend dans la classe l'utilisant, mais tu peux définir n'importe quel opérateur comme tu veux.
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Bonjour,

sûr ?



les opérateurs +, -, ... ne peuvent être surcharger qui s'il y a au
moins une classe sur une des opérandes. Un compilo devrait de confirmer
ça.

Voila ce que dit comeau :



Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++

"ComeauTest.c", line 1: error: nonmember operator requires a parameter with class
or enum type
int operator + ( int a, int b )
^

"ComeauTest.c", line 6: error: nonmember operator requires a parameter with class
or enum type
int operator += ( int a , int b)
^

2 errors detected in the compilation of "ComeauTest.c".





Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
On ne doit pas pouvoir redéfinir un opérateur, mais juste en définir de nouveau. Par exemple, ca marche tres bien:



#include

#include <string>

#include <windows.h>



using namespace std;



int operator + (string a, int b)

{

return a.size() + b;

}



int main(int argc, char * arv[])

{

int b = 4;

string s("test");

cout << s+b << endl;



system("PAUSE");

return 0;

}
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Puisque std::string est une classe, c'est bon.