Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

référence sur une classe redéfinissant l'opérateur d'affectation

3 réponses
Avatar
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"

Merci d'avance

3 réponses

Avatar
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
Avatar
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
Avatar
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