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

Le
Philippe MESMEUR
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 =).

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 =" e=
st
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"

Merci d'avance
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #21342941
Philippe MESMEUR
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
Le #21343911
On 8 Mar, 16:45, Philippe MESMEUR
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 #21349241
Le 08-03-2010, Philippe MESMEUR
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
Publicité
Poster une réponse
Anonyme