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

  FORUM HardWare.fr
  Programmation

  [C++] clone d'objets (urgent)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] clone d'objets (urgent)

n°37224
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 00:41:03  profilanswer
 

On fait comment si on veut cloner un objet à l'identique ? Y a t-il un operateur du type new, ou je ne sais quoi, ou alors doit-on tout se taper soit même ???

mood
Publicité
Posté le 06-06-2001 à 00:41:03  profilanswer
 

n°37226
youdontcar​e
Posté le 06-06-2001 à 00:44:01  profilanswer
 

duplicateobject(), puis, pour se détendre, makecoffee() :D
 
non, il faut dupliquer à la main. à toi de créer une nouvelle instance de l'objet, copier tous les membres (copymemory) ne marchera que si tu n'as pas d'objets complexes au sein de la classe (pointeurs à dupliquer à la pogne)

n°37250
tgrx
My heart is pumping for love
Posté le 06-06-2001 à 09:03:34  profilanswer
 

Pareil que youdontcare...
 
Si ta classe ne comporte pas de pointeurs ni de references, en gros si chaque element de ta classe est independant du reste, l'operateur = fera une copie octet pour octet, et ca marchera nickel.
En revanche si tu as des pointeurs, l'operateur = standard te fera aussi une duplication de ces pointeurs, et donc les elements de ta nouvelle instance peuvent pointer vers des elements de l'ancienne... faire attention donc (tu as juste a surcharger l'operateur = pour qu'il fasse ce que tu veux).

n°37332
BENB
100% Lux.
Posté le 06-06-2001 à 12:24:59  profilanswer
 

Operateur = ou constructeur de copie...
 
s'il n'y a pas de pointeurs ou de references dans ta construction tu peut utiliser ceux generes par le compilo

n°37333
verdoux
And I'm still waiting
Posté le 06-06-2001 à 12:32:21  profilanswer
 

Le constructeur de copie est même plus indiqué.

n°37360
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 14:17:06  profilanswer
 

C'est quoi un constructeur de copie ???
Et comment j'utilise l'operateur = ?

n°37362
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 14:18:43  profilanswer
 

je peux pas faire objet1 = objet2, ca travaille sur les pointeurs.
Par contre, si je fais *objet1 = *objet2, ca fait quoi ?

n°37389
H4dd3R
Q2
Posté le 06-06-2001 à 15:21:28  profilanswer
 

Un copy constructor est un constructeur qui en profite pour faire une copie..
 
class Toto
{
public:
   int i;
 
   Toto();
   Toto(Toto& Source);  <- le copy constructor.
};
 
Toto::Toto(Toto& Source)
{   // Copier le int.
    i=Source.i;
}
 
Typiquement un object qui alloue de la mémoire (avec un pointeur dedans donc) devra verrouiller le copy constructor car l´allocation de mem peut foirer..  :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°37400
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 15:42:01  profilanswer
 

j'ai fait un truc un peu dans ce gout la, mais en moins clair. Mais en ce qui concerne la copie d'objet octet par octet dont parle tgrx, ca marche comment ?

n°37406
H4dd3R
Q2
Posté le 06-06-2001 à 15:51:25  profilanswer
 

Si tu es sûr de pouvoir copier bit à bit, mais vraiment si tu es sûr  :D  :D  :D , ya une méthode simple, rapide (donc bourrine)..
 
Toto::Toto(Toto& Source)
{  // J´adore être bourrin qd c sûr!!
   memcpy(this, &Source, sizeof(Toto));
}
 
Rigolez pas, c pas de la mauvaise programmation, c sûr!!
Mais il faut faire gaffe à n´avoir que des éléments qui l´acceptent ds la classe!! ;)

mood
Publicité
Posté le 06-06-2001 à 15:51:25  profilanswer
 

n°37411
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 16:02:48  profilanswer
 

je vais tester, mais ca me tente moyen :)

n°37415
tgrx
My heart is pumping for love
Posté le 06-06-2001 à 16:07:53  profilanswer
 

oliv5> c'est ce que je voulais dire par copie octet par octet... faire un bete memcpy()

n°37416
H4dd3R
Q2
Posté le 06-06-2001 à 16:12:20  profilanswer
 

Non non oliv5 soit pas aigri c tt à fait correct!!
C d´ailleurs ce que fait l´opérateur = par défaut et le copy constructor par défaut..
 
Le pb des 3 c que si tu as des trucs plus complexes genre de la mémoire allouée et l´adresse stockée, il va copier bien gentiment l´adresse au lieu d´allouer de la nouvelle mémoire et de copier les contenus.. Et qd tu auras détruit le premier obj mémoire les pbs commenceront!! ;)

n°37442
janoscoder
Posté le 06-06-2001 à 16:53:19  profilanswer
 

showtime
Déjà, quand y'a pas de pointeur, genre on utilise la STL, on peut se fier à l'opérateur par recopie défini implicitement
->tgrx, non, il fait pas une copie octet par octet, mais appelle l'opérateur = des données membres et classes fille, et l'op = pour un pointeur, c'est ce que l'on sait.
Mais s'il faut écrire l'opérateur = soi même, voici la forme:
ex sur un truc du genre vecteur
 
class A
{
 int n;
 int * data;
public:
 A(int size):n(size), data(new int[size]){}  
 ~A(){delete[]data;}
 A & operator = (const A & other)
  {
   if (&other==this)
    return *this; //c'est mio-même
   delete [] data; //ou ~A();
   n=other.n;
   data= new int[n];
   for (int i=0; i<n; i++)
    data[i]=other.data[i];
   return *this;
  }
};

n°37529
oliv5
Pourquoi ? Parce que !
Posté le 06-06-2001 à 20:48:08  profilanswer
 

Vu que je ne souhaite pas concerver les objets alloues, j'ai fait un simple constructeur de copie. Mais redefinir l'operateur = ca peut m'etre utile.Merci janoscoder..

n°37546
BifaceMcLe​OD
The HighGlandeur
Posté le 06-06-2001 à 22:05:42  profilanswer
 

Attention !
 
Si tu redéfinis l'opérateur d'affectation, il est plus que conseillé de l'écrire comme suit:

Code :
  1. MyClass& MyClass::operator=(const MyClass& object) {
  2.     if (this != &object) {
  3.         // Code pour recopier effectivement l'objet object dans *this.
  4.     }
  5.     return *this;
  6. }


Parce que si la condition en rouge ci-dessus n'est pas vérifiée et qu'on fait quand même la recopie, on se retrouve très souvent avec un comportement vraiment bizarre, incorrect (évidemment) et bonne chance pour trouver que ça vient de là...

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

n°37563
janoscoder
Posté le 06-06-2001 à 23:15:19  profilanswer
 

BifaceMcLeOD->relis mon code

n°37568
BifaceMcLe​OD
The HighGlandeur
Posté le 07-06-2001 à 01:20:10  profilanswer
 

:o Ca devait être la seule chose du topic que je n'avais pas lu.  :sarcastic:  
 
Sorry. ;)


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

  [C++] clone d'objets (urgent)

 

Sujets relatifs
URGENT IIS 3.0 et pages ASP[C] Implantation d'objets dans 1 liste
ASP urgent!!! durée d'exécution d'un script, aidez moi!!!!Java : lire/écrire dans un fichier des objets directement : possible ?
CGI besoin d'aide urgent[C++] Très Urgent !!! Question de vie ou de ...
DELPHI URGENT !!!Pb urgent en HTML et JavaScript
URGENT!!! probleme de driver[Access-VB] Conversion d'objets......
Plus de sujets relatifs à : [C++] clone d'objets (urgent)


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