begin process at 2012 05 28 22:39:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Constrcucteur par recopie et surcharge d'operateur =


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Constrcucteur par recopie et surcharge d'operateur =

lundi 21 juillet 2003 à 14:36:50 | Constrcucteur par recopie et surcharge d'operateur =

Bebert37

quelqu'un pourrait-il m'exliquer comment ça se passe lors de l'utilisation du '=' en c++.
Je sais que lorsqu'on surcharge le egale le constructeur par recopie est appellé mais ou intervient'il ?
Si on crait un main comme le suivant
main(){
A* E1;
A E2;

E1 = new A();
E1.SetNom("Mon objet A");
E2 = *E1;
cout << E2.GetNom() << endl;

return EXIT-SUCCESS;
}

Le resultat de l'exemple précédent donne

on est passer dans la surcharge du =
on est passer par le recopieur
Mon Objet A

Or le code est fait de tel façon que normalement si on passe dans le recopieur on supprime la liste d'element. Mais la, bizarrement la liste d'element qui devrait etre supprimer y est encore puisque on a put lire le Nom du premiere element.
Si queqlu'un peut me renseigner ...
merci a vous !!!

Bebert37

voici le code source :
class A{

protected :
list<Element> E;

public:
A();
~A();
A(const A& o);
A operator(const A& o);
};


A::A(const A& o){
E.erase();
cout << "on est passer par le recopieur" << endl;
}

A A::operator=(const A& o){

E = o.E
cout << "on est passer dans la surcharge du =" << endl;
return *this;
}


// retourne le nom du premier element
char* A::GetNom(){

list<Element>::iterator p;

p = E.begin();

// retourne le nom de l'element
return p->RetNom();
}






lundi 21 juillet 2003 à 19:44:10 | Re : Constrcucteur par recopie et surcharge d'operateur =

tcok

Membre Club
en fait, l'operateur = est declaré avec comme parametre une reference sur l'objet. donc aucune copie n'est effectuée ...
la, il rentre ds la surcharge du =, jusque a tout est ok ..

enfin, le recopieur est appelé lorsque la fonction du = se termine et transmet un objet a son appelant (et non une reference) :)

en tout cas c comme ca que je le vois.



-------------------------------
Réponse au message :
-------------------------------

> quelqu'un pourrait-il m'exliquer comment ça se passe lors de l'utilisation du '=' en c++.
> Je sais que lorsqu'on surcharge le egale le constructeur par recopie est appellé mais ou intervient'il ?
> Si on crait un main comme le suivant
> main(){
> A* E1;
> A E2;
>
> E1 = new A();
> E1.SetNom("Mon objet A");
> E2 = *E1;
> cout << E2.GetNom() << endl;
>
> return EXIT-SUCCESS;
> }
>
> Le resultat de l'exemple précédent donne
>
> on est passer dans la surcharge du =
> on est passer par le recopieur
> Mon Objet A
>
> Or le code est fait de tel façon que normalement si on passe dans le recopieur on supprime la liste d'element. Mais la, bizarrement la liste d'element qui devrait etre supprimer y est encore puisque on a put lire le Nom du premiere element.
> Si queqlu'un peut me renseigner ...
> merci a vous !!!
>
> Bebert37
>
> voici le code source :
> class A{
>
> protected :
> list<Element> E;
>
> public:
> A();
> ~A();
> A(const A& o);
> A operator(const A& o);
> };

>
> A::A(const A& o){
> E.erase();
> cout << "on est passer par le recopieur" << endl;
> }
>
> A A::operator=(const A& o){
>
> E = o.E
> cout << "on est passer dans la surcharge du =" << endl;
> return *this;
> }

>
> // retourne le nom du premier element
> char* A::GetNom(){
>
> list<Element>::iterator p;
>
> p = E.begin();
>
> // retourne le nom de l'element
> return p->RetNom();
> }
>
>
>
>
>
>
>
lundi 21 juillet 2003 à 19:54:08 | Re : Constrcucteur par recopie et surcharge d'operateur =

tcok

Membre Club
ah excuse ! pour la deuxieme question : pourquoi la liste est pas detruite :

le constructeur de copie appelé detruit sa PROPRE liste alors que l'objet retourne est en parametre !

je crois que c pour ca !

@+
tcok



-------------------------------
Réponse au message :
-------------------------------

> en fait, l'operateur = est declaré avec comme parametre une reference sur l'objet. donc aucune copie n'est effectuée ...
> la, il rentre ds la surcharge du =, jusque a tout est ok ..
>
> enfin, le recopieur est appelé lorsque la fonction du = se termine et transmet un objet a son appelant (et non une reference) :)
>
> en tout cas c comme ca que je le vois.
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > quelqu'un pourrait-il m'exliquer comment ça se passe lors de l'utilisation du '=' en c++.
> > Je sais que lorsqu'on surcharge le egale le constructeur par recopie est appellé mais ou intervient'il ?
> > Si on crait un main comme le suivant
> > main(){
> > A* E1;
> > A E2;
> >
> > E1 = new A();
> > E1.SetNom("Mon objet A");
> > E2 = *E1;
> > cout << E2.GetNom() << endl;
> >
> > return EXIT-SUCCESS;
> > }
> >
> > Le resultat de l'exemple précédent donne
> >
> > on est passer dans la surcharge du =
> > on est passer par le recopieur
> > Mon Objet A
> >
> > Or le code est fait de tel façon que normalement si on passe dans le recopieur on supprime la liste d'element. Mais la, bizarrement la liste d'element qui devrait etre supprimer y est encore puisque on a put lire le Nom du premiere element.
> > Si queqlu'un peut me renseigner ...
> > merci a vous !!!
> >
> > Bebert37
> >
> > voici le code source :
> > class A{
> >
> > protected :
> > list<Element> E;
> >
> > public:
> > A();
> > ~A();
> > A(const A& o);
> > A operator(const A& o);
> > };

> >
> > A::A(const A& o){
> > E.erase();
> > cout << "on est passer par le recopieur" << endl;
> > }
> >
> > A A::operator=(const A& o){
> >
> > E = o.E
> > cout << "on est passer dans la surcharge du =" << endl;
> > return *this;
> > }

> >
> > // retourne le nom du premier element
> > char* A::GetNom(){
> >
> > list<Element>::iterator p;
> >
> > p = E.begin();
> >
> > // retourne le nom de l'element
> > return p->RetNom();
> > }
> >
> >
> >
> >
> >
> >
> >
>
mardi 22 juillet 2003 à 09:44:01 | Re : Constrcucteur par recopie et surcharge d'operateur =

Bebert37

C'est vrai s'est logique
merci bien.
Mais dans ce cas comment se fait-il que l'on puisse acceder aux liste alors que le constructeur par recopie les a effacées ??

-------------------------------
Réponse au message :
-------------------------------

> en fait, l'operateur = est declaré avec comme parametre une reference sur l'objet. donc aucune copie n'est effectuée ...
> la, il rentre ds la surcharge du =, jusque a tout est ok ..
>
> enfin, le recopieur est appelé lorsque la fonction du = se termine et transmet un objet a son appelant (et non une reference) :)
>
> en tout cas c comme ca que je le vois.
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > quelqu'un pourrait-il m'exliquer comment ça se passe lors de l'utilisation du '=' en c++.
> > Je sais que lorsqu'on surcharge le egale le constructeur par recopie est appellé mais ou intervient'il ?
> > Si on crait un main comme le suivant
> > main(){
> > A* E1;
> > A E2;
> >
> > E1 = new A();
> > E1.SetNom("Mon objet A");
> > E2 = *E1;
> > cout << E2.GetNom() << endl;
> >
> > return EXIT-SUCCESS;
> > }
> >
> > Le resultat de l'exemple précédent donne
> >
> > on est passer dans la surcharge du =
> > on est passer par le recopieur
> > Mon Objet A
> >
> > Or le code est fait de tel façon que normalement si on passe dans le recopieur on supprime la liste d'element. Mais la, bizarrement la liste d'element qui devrait etre supprimer y est encore puisque on a put lire le Nom du premiere element.
> > Si queqlu'un peut me renseigner ...
> > merci a vous !!!
> >
> > Bebert37
> >
> > voici le code source :
> > class A{
> >
> > protected :
> > list<Element> E;
> >
> > public:
> > A();
> > ~A();
> > A(const A& o);
> > A operator(const A& o);
> > };

> >
> > A::A(const A& o){
> > E.erase();
> > cout << "on est passer par le recopieur" << endl;
> > }
> >
> > A A::operator=(const A& o){
> >
> > E = o.E
> > cout << "on est passer dans la surcharge du =" << endl;
> > return *this;
> > }

> >
> > // retourne le nom du premier element
> > char* A::GetNom(){
> >
> > list<Element>::iterator p;
> >
> > p = E.begin();
> >
> > // retourne le nom de l'element
> > return p->RetNom();
> > }
> >
> >
> >
> >
> >
> >
> >
>


Cette discussion est classée dans : recopie, const, blue, surcharge, e1


Répondre à ce message

Sujets en rapport avec ce message

STL operateur= et constructeur par recopie [ par Bebert37 ] Salutc'est l'histoire d'un probleme bizarre (les voies de l'informatique sont impenetrables )J'ai un objet RdP avec son constrcucteur par recopie et u Crash a l'execution mais non en mode de debuggage [ par cybermatthieu ] La si je roule le programme avec le mode de debugage tout fonctionne a merveille il termine l'execution normalement. Mais si je roule le programme ( s imcomprehension const_cast [ par omi ] Je ne comprennait pas l'utilité de const_cast alors j'ai pris un exemple : const int cst = 20;int *z = const_cast(&cst);*z = 30;cout cout << Probleme fonction System(); plz help :( [ par asurasur ] Bonjour, j'ai un soucis avec la portion de code suivante :char valeur5[1024];LireB2R(HKEY_CURRENT_USER,"software\\softphonesip","chemin",valeur5,1024) Surcharge d'operateur [ par AngeloVivaldi ] Salut, je voudrai redefinir cout dans de iostream.h pour qu'il affiche un membre de ma class au lieu d'afficher l'adresse de l'objet :Par exemple, pou demande d'aide [ par dhaw ] je demande SVP un code source en C sur la simulation d'un réseau de files d'attente, merci!! c'est très urgent!SVP aider moi !! Quelles sont les bases... [ par Zeil ] Bon, attention, le pavé est en cours de rédaction.Commençons par ma présentation:Je suis étudiant en 2eme candidature informatique (Belgique) et je co Convertir un const char * en char * [ par Mike ] SAlut,j'aimerais convertir un 'const char *' en 'char *', bizarement aucune libraire ne le fé, ou alors j'ai pas trouvé lol. Donc si vous pouviez m'ai DLL et fichier de VCL [ par Siriusgalaxie26 ] SiriusJ'ai un problème de débutant : Dès qu je compile un programme avec Broland C++ Builder, Ce programme marche sur mon ordi, mais pas sur un autre. MessageBox - Const Char - Concversion ASCII [ par guitoulefoux ] Bonjour,J'ai encore besoin de vos lumieres (et ca sera pas la derniére)1- j'utilise une boucle pour récupérer les actions clavier:if(GetAsyncKeyState(


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales