begin process at 2012 05 29 22:45:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème pour l'utilisation d'un constructeur de recopie


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

Problème pour l'utilisation d'un constructeur de recopie

vendredi 10 mars 2006 à 22:05:19 | Problème pour l'utilisation d'un constructeur de recopie

vincemail

Bonsoir à tous, j'ai un petit problème concernant le constructeur de recopie d'une classe, ou plutot son utilisation. Voilà, je crée une classe Vecteur avec un constructeur de recopie : "Vecteur::Vecteur(const Vecteur&)". Le problème c'est que je souhaite recopier un vecteur dans un tableau de vecteurs :
Vecteur* tableau;             // Ca c'est mon tableau de vecteurs
Vecteur vecteur(0,1,2);    // Là un vecteur avec initialisation des membres

tableau=new Vecteur[10];

tableau[0]=Vecteur(vecteur);   // Et là je tente de recopier vecteur dans une case du tableau

Le problème c'est qu'apparemment il s'agit d'une affectation et non de la création d'un objet recopié (qu'il faudrait faire avec "new"), alors dès que l'objet temporaire Vecteur(vecteur) est affecté à tableau[0], il est détruit par le destructeur de la classe Vecteur, et donc tous les pointeurs de tableau[0] (que je n'ai pas explicités ici) sont détruits avec... Je ne peux pourtant pas écrire "tableau[0]=new Vecteur(vecteur)" qui me retourne une erreur...

Si quelqu'un sait comment faire, je l'en remercie d'avance.
Vincent
vendredi 10 mars 2006 à 22:29:19 | Re : Problème pour l'utilisation d'un constructeur de recopie

luhtor

Réponse acceptée !
Faut pas faire n'importe quoi et attendre que le compilo soit pas content.
Evidemment que ca marche pas et que ca ne peut pas marcher. Quand tu créés ton tableau avec new Vecteur[10];
Les objets sont deja créer par NEW, donc pourquoi veux tu encore utiliser un constructeur ?
Sinon tu as raison, "tableau[0]=Vecteur(vecteur);" c'est une affectation donc faut surcharger l'opérateur "=" et non utiliser le constructeur par recopie.
Et donc tu utilises l'opérateur de la facon suivante:
tableau[0]=vecteur;

Je comprend pas ce que tu dis dans la suite au sujet du destructeur. Tant que l'objet tableau n'est pas détruit par delete[], tous les élements existent.
vendredi 10 mars 2006 à 22:40:26 | Re : Problème pour l'utilisation d'un constructeur de recopie

vincemail

Ah vi, j'avais oublié qu'on pouvait surdéfinir l'opérateur "="... Je vais essayer, ca résoudra sûrement mon problème.

Ce que je disais au sujet du destructeur c'est qu'apparemment, lorsqu'on écrit :
tableau[0]=Vecteur(vecteur);
C'est comme si ca faisait :

vecteurTemporaire=new Vecteur(vecteur);
tableau[0]=vecteurTemporaire;
delete vecteurTemporaire;


Et du coup tous les pointeurs membres de la classe Vecteur sont supprimés...

Merci encore.
Vincent
vendredi 10 mars 2006 à 23:58:46 | Re : Problème pour l'utilisation d'un constructeur de recopie

luhtor

Oui mais je vois pas pourquoi sur des vecteurs, tu aurais des pointeurs. Et puis tes pointeurs ne concernent que l'objet vecteurTemporaire normalement. Donc c'est tout a fait normal.
samedi 11 mars 2006 à 14:58:24 | Re : Problème pour l'utilisation d'un constructeur de recopie

vincemail

    Non en fait l'objet Vecteur c'était pour l'exemple... en réalité il s'agit d'un objet qui comporte des pointeurs. Et lorsque je fait tableau[0]=vecteurTemporaire, ce ne sont pas les valeurs des pointeurs qui sont recopiées mais les adresses et du coup tableau[0] et vecteurTemporaire ont des pointeurs qui pointent sur le meme objet.Donc lorsque cet objet est détruit lorsque vecteurTemporaire est automatiquement détruit, et bien les pointeurs de tableau[0] ne pointent sur plus rien du tout...
Sinon je viens de surdéfinir l'opérateur=, et tout marche super bien maintenannt. Merci


Cette discussion est classée dans : problème, tableau, recopie, vecteur, constructeur


Répondre à ce message

Sujets en rapport avec ce message

Problème de tableau sans solution? [ par PsyCaDi ] traitement de tableau dans une routine asm [ par anosan ] Salut tout le monde,J'explique mon problème: dans un programme en C++(borland c++builder6), j'ai declaré un tableau. Pour le traiter efficassement, j' Problème de tableau ! [ par Xentor ] Bonjour,Je voudrais déclarer un tableau de caractères en variable générale et pouvoir modifier sa taille dans une fonction !Exemple (écrit en direct, pouvoir lire un entier en tant que tableau (bit à bit) [ par platinum07 ] Amis codeurs, bonjour !Je suis sur un petit problème depuis quelques heures... la solution est surement sous mon nez mas je ne trouve pas <img src=/im Problème malloc sous RedHat 7.3 [ par deuchman ] Salut à tous !Voilà, j'ai un problème avec un programme C sous une RedHat 7.3.Lorsque j'utilise la fonction mallc pour allouer de la mémoire à un tabl problème espace mémoire [ par borgeomi ] borgeomibonjouuuuuuur !!!!!encore une question stupide d'un programmeur cobol MVSsous VISUAL C ++ 6J'ai crée une classe Personne du stylePersonne Tab Pb pour lire un tbl [ par Stepharcher ] Bonjours à tous !Je vous explique mon problème : j'utilise la fonction GetDIBits qui me donne un tableau de pixel.Jj'ai 2 soucis : le tableau est décl Newbies et problème de pointeur [ par dartal ] Bonjour , J'ai quelque problème de compréhension au niveau de la gestion des pointeurs ... j'ai essayé de me documenter un maximum en lisant des plantage en utilisant le constructeur "new" [ par Ganaga ] Bonjour,J'utilise le constructeur new pour affecter un tableau d'entiers dans une boucle qui s'exécute plus de 10000x. Au bout d'un certain temps (lon Problème d'entrée (cin >>) dans un tableau de float [ par Oeil_de_taupe ] Hello tout le monde,désolé de vous importuné. Mais j'ai fait une toute petite source pour apprendre à allouer de la mémoire pour une variable puis de


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,671 sec (3)

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