Partage
  • Partager sur Facebook
  • Partager sur Twitter

DeepCopy

Copie d'une référence d'un objet

22 septembre 2021 à 13:00:31

Bonjour a tous.

Je rencontre quelques difficultés à réaliser un exercice en envoyé par mon prof. 
Je doit réaliser une copie profonde de 2 classes : point et polygone (qui utilise un tableau de points)
Je n'ai pas eu de problème pour réaliser la copie profondes des points mais lorsque je fait la copie profonde des polygone, cela me génère un NullPointerException et je n'arrive pas a savoir pourquoi.
Voici mon code pour le polygone:
class Polygone
    {
        public Point[] points;

        public Polygone(Polygone p)
        {
            for(int i = 0; i < p.points.Length; i++)
            {
                points[i].x = p.points[i].x;
                points[i].y = p.points[i].y;
            }
        }

        public Polygone(Point[] points)
        {
            this.points = points;
        }

    }
Le code pour le point:
class Point
    {
        public int x, y;

        public Point(Point p): this(p.x, p.y)
        {}

        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

    }
Et le main:
class Program
    {
        static void Main(string[] args)
        {
            
            // Décomentez pour tester

            Point p1 = new Point(1,2);
            Point p2 = new Point(p1); // deep copy

            p2.x = 3;
            Debug.Assert(p1.x != p2.x, "Problème sur le constructeur par copie de Point.");

            Point[] points = {p1, p2};
            
            Polygone po1 = new Polygone(points);
            Polygone po2 = new Polygone(po1); // deep(er) copy

            po2.points[0].x = 4;
            Debug.Assert(po2.points[0].x != po1.points[0].x, "Problème sur le constructeur par copie de Polygone.");
            

        }
    }
Merci d'avance pour votre aide
  • Partager sur Facebook
  • Partager sur Twitter
22 septembre 2021 à 14:02:35

Dans "new Polygone(po1);", où est initialisé le champ 'points' de l'objet en cours de création ?

Donc à la ligne 9 du fichier de définition de la classe 'Polygone' : "points[i].x = p.points[i].x;" ; 'points' vaut null car non encore initialisé.

Donc pan dans les dents "NullPointerException".

Le débogueur est ami.

EDIT suite message d'@umfred.

-
Edité par bacelar 22 septembre 2021 à 15:50:17

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
22 septembre 2021 à 15:43:16

Je précise que bacelar parle du points à gauche de l'expression (même si ça peut paraitre évident).
  • Partager sur Facebook
  • Partager sur Twitter