Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1816 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème avec la copie de variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec la copie de variables

n°784351
Celina Kyl​e
Posté le 02-07-2004 à 09:48:22  profilanswer
 

Bonjour à tous,
 
Je continue mon apprentissage du C++, et je suis confrontée à un petit problème. Voici mon code de test :
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class test
  4. {
  5.    public:
  6.    int *a;
  7.    test();
  8.    ~test();
  9. };
  10. test::test()
  11. {
  12.    a = new int;
  13.    *a = 4;
  14. }
  15. test::~test()
  16. {
  17.    delete a;
  18. }
  19. int main()
  20. {
  21.    test t1;
  22.    test t2 = t1;
  23.    *(t1.a) = 4;
  24.    *(t2.a) = 5;
  25.    cout << *(t1.a) << endl;
  26.    cout << *(t2.a) << endl;
  27.    cin.ignore();
  28. }


J'obtiens la sortie suivante :

Citation :


5
5


Et je ne comprends pas pourquoi. On dirait que la modification de la variable "a" de t2 a modifié la variable "a" de t1.
Je ne comprends pas pourquoi.
 
Merci d'avance pour votre aide

mood
Publicité
Posté le 02-07-2004 à 09:48:22  profilanswer
 

n°784358
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-07-2004 à 09:50:50  profilanswer
 

en initialisant t2 à partir de t1, tu en copies tous les membres, notamment le pointeur *a qui sera donc le même sur les 2 objets. en l'occurence, toute modification de l'objet pointé par a sur t1 sera répercuté sur t2 puisqu'ils ont la même adresse.
 
=> il te faut un constructeur de copie pour ta classe test


---------------
J'ai un string dans l'array (Paris Hilton)
n°784374
Celina Kyl​e
Posté le 02-07-2004 à 09:56:40  profilanswer
 

Je ne connais pas du tout cette notion de constructeur de copie. A quoi sert il, et comment l'utiliser pour résoudre mon problème ?

n°784379
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-07-2004 à 10:00:28  profilanswer
 

euh, tu suis des cours ou pas ? [:heink]
un constructeur de copie est utilisé justement dans ton cas précis (entre autres) : lorsqu'une classe contient une variable membre de type objet dynamique (un pointeur quoi)
dans ton cas précis, ton constructeur de copie devra réaliser une nouvelle initialisation de ton pointeur a, pour éviter qu'il n'ait la même adresse que l'objet que tu copies.
 
dans la déclaration de ta classe, rajoute la ligne suivante :

Code :
  1. test(test& );


ce constructeur sera implémenté comme ceci :

Code :
  1. test::test(test& t)
  2. {
  3.    a = new int;
  4. }


et O miracle, tu devrais obtenir les valeurs souhaitées (4 et 5)


---------------
J'ai un string dans l'array (Paris Hilton)
n°784441
Celina Kyl​e
Posté le 02-07-2004 à 10:34:14  profilanswer
 

Ca fonctionne parfaitement, merci pour ton aide. :jap:
Je vais me pencher plus profondément sur cette notion qui m'était totalement inconnue.

n°784517
Taz
bisounours-codeur
Posté le 02-07-2004 à 11:02:32  profilanswer
 

harko t'es un boolay
 
vous êtes tous des boolay
 
 
Celina > dans ce genre de cas, c'est à dire avec des pointeurs, ce que génère le compilateur à ta place n'est pas satisfaisant car ça ne fait qu'une copie de surface. il faut faire une copie profonde, c'est à dire allocation+recopie
 
la forme de Coplien, tu dois définir minimum
 
A()
A(const A & );
A & operator=(const A & );
~A();
 
donc Harko s'est royalement planté dans la signature, et surtout il a oublié l'operator=. tu suis tes cours ? :D

n°784546
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-07-2004 à 11:14:53  profilanswer
 

Taz a écrit :

harko t'es un boolay
 
vous êtes tous des boolay


rooo, mais j'ai pas dit tant de conneries que ça bon dieu :o
j'ai juste oublié un const et l'operator=, y'a des boolays qui ont fait pire hein :o


---------------
J'ai un string dans l'array (Paris Hilton)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème avec la copie de variables

 

Sujets relatifs
Un probleme de CSS et de DIV avec IEProblème de requetes SQL
Problème d'ancodage lors de lecture dans un fichierProblème CSS avec IE
Problème de recherche d'un motProblème requête sql base oracle
[php/html] probleme de ... euh frame ?probleme de message au demarage
[PHP] Commande exec - probleme de passage de parametres[ASP] [Résolu] Problème d'actualisation
Plus de sujets relatifs à : Problème avec la copie de variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR