IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[résolu]les constructeurs de copie


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 76
    Points
    76
    Par défaut [résolu]les constructeurs de copie
    bjr,

    j'ai des problemes de pointeurs ds mes list(), et on m a conseillé d utilisé un constructeur de copie.

    Or je debute et je sais en construire mais pas trop comment m en servir.

    je voudrais recopier 3 objet identique au depart ds une ArrayList(). et pouvoir enseuite les modifier les 3 separements.

    Or evidemment, quand je modifie l un , les autre aussi. problem d affectationd adresse.

    Alors si vous avez des idée concretes d 'utilisation de constructeur de copie, cela m aiderai.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Certaines classe ont une méthode clone() pour cloner les objets. Vérifie que tu ne peux pas utiliser cette méthode dans ton cas. Sinon il faudra que tu en ecrive une.
    Mess with the best, die like the rest!

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 76
    Points
    76
    Par défaut
    non, lol il n y a pas de classe clone().
    donc j ai pas d autre choix que de passer par des contructeurs de copie. mais avez vous une idée d exemple?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    ben c pas facile de donner un exemple.

    voila l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Voiture {
    Color couleur;
    int prix;
    public Voiture (Color c, int p) {
       couleur = c;
       prix = p;
    }
    public Voiture(Voiture v) {
      couleur = v.couleur;
       prix = v.prix;
    }
    public static Voiture copieDe(Voiture v) {
       return new Voiture(v.couleur,v.prix);
    }
    public Object clone() {
       return new Voiture(this.couleur.clone(), this.prix);
    }
    apres ca s'utilise comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Voiture v1 = new Voiture(Color.BLACK,10000);
    Voiture v2 = (Voiture)v1.clone();
    Voiture v3 = new Voiture(v1);
    Voiture v4 = copieDe(v1);
    et si tu change la couleur d'une voiture l'autre gardera sa couleur intacte
    Mess with the best, die like the rest!

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Un ti exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class Personne {
      private String nom;
      private String prenom;
      private int age;
      private String adresse;
     
      /** constructeur */
      public Personne(nom, prenom, age, adresse) {
        this.nom = nom ;
        this.prenom = prenom;
        this.age = age;
        this.adresse = adresse;
      }
     
      /** constructeur de copie */
      public Personne(Personne personne) {
        this.nom = personne.nom;
        this.prenom =  personne.prenom;
        this.age = personne.age;
        this.adresse = personne.adresse;
      }
    }

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par barbu0055
    class Voiture implements Cloneable {

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 30
    Points : 36
    Points
    36
    Par défaut
    pas besoin d'une classe clone, toutes les classes de java possede la methode clone, toString...etc parcequ'elles heritent par defaut de la classe Object
    ++

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Cloneable n'est pas une classe, mais une interface. Si tu n'implémentes pas l'interface Clonable, alors la méthode clone() va lever l'exception CloneNotSupportedException. Regarde la Javadoc

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 30
    Points : 36
    Points
    36
    Par défaut
    oui je sais que implements c'est pour implementer des interfaces, mais ce que je savais pas c'est l'utilité de clonable.
    merci pour l'info
    ++

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 76
    Points
    76
    Par défaut
    je remercie ceux qui m ont repondu a mon post, l exemple de barbu est excellent, cela m a montré pleins de possibilité de copie de valeur.

    vos reponses m 'ont aidé , mais j ai mal formulé mon post pour avoir une reponse plus precise.

    En fait j avais un objet que je voulais le copier plusieur fois ds une arrayList().
    Simplement j avais pas precisé que ds cet objet, il y avait un autre objet imbriqué, ce qui a induit a aucun changement du resultat si je ne faisait pas une copie profonde.

    donc il fallait faire un constructeur de copie pour les objets imbriqués aussi.

    merci de vos aides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/10/2007, 01h50
  2. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  3. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31
  4. Constructeur de copie modifiant le paramètre ?
    Par Nicodemus dans le forum C++
    Réponses: 4
    Dernier message: 12/01/2005, 21h25
  5. Constructeur de copie et Template: Transtypage
    Par ikkyu_os dans le forum Langage
    Réponses: 9
    Dernier message: 26/12/2004, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo