Surcharge d'opérateurs

minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 - 4 nov. 2005 à 14:26
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 - 5 nov. 2005 à 10:09
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
4 nov. 2005 à 15:09
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.
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
4 nov. 2005 à 22:40
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 nov. 2005 à 02:10
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;

}
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
5 nov. 2005 à 10:09
Puisque std::string est une classe, c'est bon.
0
Rejoignez-nous