référence sur une classe redéfinissant l'opérateur d'affectation
3 réponses
Philippe MESMEUR
Bonjour =E0 tous,
j'ai un probl=E8me avec une r=E9f=E9rence sur une classe red=E9finissant
l'op=E9rateur d'affectation (i.e. l'op=E9rateur =3D).
class A
{
...
const A & operator=3D(const A & other) /// op=E9rateur d'affectation
{
...
}
...
}
si j'ai une classe B telle que:
class B
{
public:
B(A & a) : m_a(a)
{}
public:
SetA(A & a)
{
m_a =3D a; /// !!! ici probl=E8me car l'op=E9rateur "A::operator =3D" e=
st
appel=E9
}
private:
A & m_a;
};
Mon probl=E8me a donc lieu dans ma fonction B::SetA() qui ne fait pas du
tout ce que j'attend d'elle!!!
Connaissez vous un moyen de dire au compilateur qu'=E0 cet endroit l=E0,
il s'agit d'une "affectation de r=E9f=E9rence" et non d'un "appel =E0
l'op=E9rateur d'affectation"
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
Jean-Marc Bourguet
Philippe MESMEUR writes:
Connaissez vous un moyen de dire au compilateur qu'à cet endroit là, il s'agit d'une "affectation de référence"
Impossible, c'est une des deux differences entre reference et pointeur (la seconde etant qu'il n'y a pas de reference nulle).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Philippe MESMEUR <philippe.mesmeur@gmail.com> writes:
Connaissez vous un moyen de dire au compilateur qu'à cet endroit là,
il s'agit d'une "affectation de référence"
Impossible, c'est une des deux differences entre reference et pointeur (la
seconde etant qu'il n'y a pas de reference nulle).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Connaissez vous un moyen de dire au compilateur qu'à cet endroit là, il s'agit d'une "affectation de référence"
Impossible, c'est une des deux differences entre reference et pointeur (la seconde etant qu'il n'y a pas de reference nulle).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
James Kanze
On 8 Mar, 16:45, Philippe MESMEUR wrote:
j'ai un problème avec une référence sur une classe redéfinissant l'opérateur d'affectation (i.e. l'opérateur =).
class A { ... const A & operator=(const A & other) /// opérateur d'affectation { ... }
... }
si j'ai une classe B telle que:
class B { public: B(A & a) : m_a(a) {}
public: SetA(A & a) { m_a = a; /// !!! ici problème car l'opérateur "A::operator =" est appelé }
private: A & m_a; };
Mon problème a donc lieu dans ma fonction B::SetA() qui ne fait pas du tout ce que j'attend d'elle!!!
Connaissez vous un moyen de dire au compilateur qu'à cet endroit là, il s'agit d'une "affectation de référence" et non d'un "appel à l'opérateur d'affectation"
class B { public: B( A& a ) : m_a(&a) {} void SetA( A& a ) { m_a = &a; } private: A* m_a; };
Il n'y a pas d'« affectation de référence », d'après la définition même des références (en C++).
-- James Kanze
On 8 Mar, 16:45, Philippe MESMEUR <philippe.mesm...@gmail.com> wrote:
j'ai un problème avec une référence sur une classe redéfinissant
l'opérateur d'affectation (i.e. l'opérateur =).
class A
{
...
const A & operator=(const A & other) /// opérateur d'affectation
{
...
}
...
}
si j'ai une classe B telle que:
class B
{
public:
B(A & a) : m_a(a)
{}
public:
SetA(A & a)
{
m_a = a; /// !!! ici problème car l'opérateur "A::operator =" est
appelé
}
private:
A & m_a;
};
Mon problème a donc lieu dans ma fonction B::SetA() qui ne
fait pas du tout ce que j'attend d'elle!!!
Connaissez vous un moyen de dire au compilateur qu'à cet
endroit là, il s'agit d'une "affectation de référence" et non
d'un "appel à l'opérateur d'affectation"
class B
{
public:
B( A& a ) : m_a(&a) {}
void SetA( A& a ) { m_a = &a; }
private:
A* m_a;
};
Il n'y a pas d'« affectation de référence », d'après la
définition même des références (en C++).
j'ai un problème avec une référence sur une classe redéfinissant l'opérateur d'affectation (i.e. l'opérateur =).
class A { ... const A & operator=(const A & other) /// opérateur d'affectation { ... }
... }
si j'ai une classe B telle que:
class B { public: B(A & a) : m_a(a) {}
public: SetA(A & a) { m_a = a; /// !!! ici problème car l'opérateur "A::operator =" est appelé }
private: A & m_a; };
Mon problème a donc lieu dans ma fonction B::SetA() qui ne fait pas du tout ce que j'attend d'elle!!!
Connaissez vous un moyen de dire au compilateur qu'à cet endroit là, il s'agit d'une "affectation de référence" et non d'un "appel à l'opérateur d'affectation"
class B { public: B( A& a ) : m_a(&a) {} void SetA( A& a ) { m_a = &a; } private: A* m_a; };
Il n'y a pas d'« affectation de référence », d'après la définition même des références (en C++).
-- James Kanze
Marc Boyer
Le 08-03-2010, Philippe MESMEUR a écrit :
Bonjour à tous,
j'ai un problème avec une référence sur une classe redéfinissant l'opérateur d'affectation (i.e. l'opérateur =).
Je pense que même si cette classe ne redéfinissait pas l'opérateur =, tu aurais le problème. Une variable de type "ref sur T" désigne toujours, tout au long de sa vie, la même variable de type T. Si tu veux pouvoir changer ce que désigne ton B::m_a durant la vie d'un objet de type B, il ne faut pas utiliser une référence.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 08-03-2010, Philippe MESMEUR <philippe.mesmeur@gmail.com> a écrit :
Bonjour à tous,
j'ai un problème avec une référence sur une classe redéfinissant
l'opérateur d'affectation (i.e. l'opérateur =).
Je pense que même si cette classe ne redéfinissait pas l'opérateur
=, tu aurais le problème.
Une variable de type "ref sur T" désigne toujours, tout au long
de sa vie, la même variable de type T.
Si tu veux pouvoir changer ce que désigne ton B::m_a durant
la vie d'un objet de type B, il ne faut pas utiliser une référence.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
j'ai un problème avec une référence sur une classe redéfinissant l'opérateur d'affectation (i.e. l'opérateur =).
Je pense que même si cette classe ne redéfinissait pas l'opérateur =, tu aurais le problème. Une variable de type "ref sur T" désigne toujours, tout au long de sa vie, la même variable de type T. Si tu veux pouvoir changer ce que désigne ton B::m_a durant la vie d'un objet de type B, il ne faut pas utiliser une référence.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0