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.
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 :)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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.
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.
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.