Bonjour.
J'ai crée une classe "Point" (un point = 2 coordonnées) juste dans le but d'essayer de faire des surcharge d'opérateurs et de comprende un peu comment tout cela fonctionne.
Sans rentrer dans les détails de la classe, mon but est de pouvoir surcharger l'opérateur "=" de façon a faire une copie d'un Point. J'ai d'abord écrit une fonction "equals" de manière normale, et je l'ai ensuite modifée pour surcharger "=". Problème: ma fonction "equals" fonctionne, mais pas mon opérateur "=":
et dans mon main:
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 //temp Point* Point::equals(Point* p) { delete this; Point* temp = new Point(p); return temp; } //operators: Point* Point::operator=(Point* p) { delete this; Point* temp = new Point(p); return temp; }
Que dois-je modifier à ma fonction "equals" pour en faire un opérateur "=" qui ait le même comportement, et que n'ais-je pas compris?
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 int main(void) { Point* p1 = new Point(2,3); // p1 = (2,3) Point* p2 = new Point(); // p2 = (0,0) Point* p3 = new Point(); // p3 = (0,0) p2->equals(p1); // p2 = (2,3) p3 = p1; // p3 = (2,3) p1->SetXY(10,10); // ERREUR: ça modifie p1 ET p3. // donc p3 n'est pas une "deep copy" de p1, mais juste un "alias". // pourquoi??? return 0; }
Merci
Partager