jfk20004
Messages postés39Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention13 novembre 2004
-
25 août 2004 à 19:04
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 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
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 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