OVH Cloud OVH Cloud

question sur la surcharge d'opérateur...

1 réponse
Avatar
Frédéric GOURUL
Bonjour,
j'ai une question à propos de la surcharge de l'opérateur d'affectation.
J'ai bien compris comment l'utiliser pour faire la recopie d'objet, mais je
me demande si c'est possible pour une affectation de pointeur.

pour:
Object obj1, obj2;
obj1 = obj2
je surcharge: Object& Object::operator= (const Object& obj)

mais pour:
Object *obj1, *obj2;
obj1 = obj2
Là on ne travaille pas sur les objets, mais sur les pointeurs, donc je ne
voit pas ce que je pourrais surcharger comme opérateur, je suppose qu'ici
c'est simplement une affectation d'entier, mais je me trompe peut-être...
Y'a-t-il un moyen quand même pour que je puisse intercepter ce type
d'opération ?

J'ai pas mal de lacunes sur les opérateurs, merci de votre aide :)

1 réponse

Avatar
Cyrille Karmann
Frédéric GOURUL disait...
Bonjour,
j'ai une question à propos de la surcharge de l'opérateur d'affectation.
J'ai bien compris comment l'utiliser pour faire la recopie d'objet, mais je
me demande si c'est possible pour une affectation de pointeur.

pour:
Object obj1, obj2;
obj1 = obj2
je surcharge: Object& Object::operator= (const Object& obj)

mais pour:
Object *obj1, *obj2;
obj1 = obj2
Là on ne travaille pas sur les objets, mais sur les pointeurs, donc je ne
voit pas ce que je pourrais surcharger comme opérateur, je suppose qu'ici
c'est simplement une affectation d'entier, mais je me trompe peut-être...


Les pointeurs sont des types intégrés (types de base, comme int, char,
tout ça...). Or il est impossible de redéfinir un opérateur ne mettant
en jeu que des obets de types intégrés. Il faut au moins qu'un des
paramètes soit un type défini par l'utilisateur.

Y'a-t-il un moyen quand même pour que je puisse intercepter ce type
d'opération ?


Encapsulez votre pointeur dans une structure ou une classe.

class my_ptr
{
private:
Object *m_object;
public:
// redéfinitions des opérateurs *, ->, entre autres, pour que
// my_ptr se comporte comme un pointeur banal.

// puis définissez vos opérateurs comme vous voulez.
}

Voir par exemple les itérateurs de la STL qui ont des mécanismes
ressemblant aux pointeurs tout en apportant des choses en plus. Voir
aussi std::auto_ptr.

--
Cyrille
Usenet-fr, c'est de la merde.