Surcharge d'operateur

jfk20004 Messages postés 39 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 13 novembre 2004 - 25 août 2004 à 19:04
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 12 sept. 2004 à 23:24
Est il possible de m'expliquer clairement la surcharge
d'operateurs:
Ce que je sais :
souvent utilisé dans les redefinition de classes
mathematiques.
PROB :je ne vois pas l'interet de modifier un operateur
MERCI

10 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 20:30
exemple : les string. on a surchargé l'operateur + afin qu'il concatene les chaines. on a surchargé l'operateur < afin de pouvoir comparer deux chaines dans leur ordre alphabetique. par defaut, quand tu fais une classe, tu ne peut pas comparer deux objets de cette classe.....mais si tu as besoin de les trier? comment fait tu si les objets de ta classe ne sont pas comparables???????? ensuite l'operateur =..........imagine que tu utilise des pointeurs dans ta classe (i faut savoir que l'operateur = est donné a ta classe par le compilateur). ta classe est ecrite ainsi :

maclasse
{
char * tab;

}

tu crée deux objets de maclasse, et tu fais

obj1 = obj2.

tu n'as pas créé deux objets différents, tu as deux pointeurs sur le meme objet. dans certains cas ca va mettre la merde. exemple :

int main (void)
{
maclasse obj1;
obj1 = "truc";
{
maclasse obj2 = obj1;
obj2 = "truc2";
}
}
la obj1 pointe sur un nimporte koi : obj1 et obj2 vallent tous les 2 truc2 alors kon voudrait que obj1 vale truc et que obj2 vale truc2....
et on peut encore trouver plein d'interets
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 août 2004 à 10:54
oui, comme l'a dit leprov, la forme canonique d'une classe (qui doit etre redefinie si des donnée membre sont allouées dynamiquement) comprend l'operateur d'affection

comme pour les operateur + - * ... ca peut etre tre pratique de les redefinir

par exemple

struct Foo
{
int a,b;
};

inline std::ostream& operator << ( std::ostream& o, const Foo& f )
{
return o << f.a << ' ' << f.b;
}

tu pourras faire directement

Foo f;
...

std::cout << f << ' \n';

les possibilités sont vraiment enorme, tu peux redefinir tous les operateur sauf ::, ., .*, ?:, sizeof, typeid, static_cast, dynamic_cast, const_cast et reinterpret_cast
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 sept. 2004 à 20:25
djl> saurais tu m'éclairé sur la signification de .* ??

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 sept. 2004 à 20:25
djl> saurais tu m'éclairé sur la signification de .* ??

Magic Nono: l'informagicien! 8-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
10 sept. 2004 à 20:32
c'est l'operateur qui permet d'appeler un pointeur de foncctions membres
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
10 sept. 2004 à 20:34
je precise ausssi que dans la liste, l'operateur , n'en fais pas partie (pas facile a voir :) )
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
10 sept. 2004 à 20:42
appel de ptr de fonction ie ;

un des membre public est un ptr sur fonc

et C pr l'appeler?

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
10 sept. 2004 à 20:57
oui un membre, pas forcement public
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
11 sept. 2004 à 12:02
euh......j'ai po compris moi, tu pourrais expliquer un peu plus clairement, et donner un ptit exemple?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 sept. 2004 à 23:24
ok, c'es pour deferencer un pointeur sur fonction membre

struct Foo
{
void bar(int n){}
};

typedef void(Foo::*Foo_func)(int);

int main()
{
Foo foo;
Foo_func f;

f = &Foo::bar;

(foo.*f)(2);
}
0
Rejoignez-nous