Dev - C++ - como hacer sobrecarga operador =

 
Vista:
Imágen de perfil de felipe
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

como hacer sobrecarga operador =

Publicado por felipe (74 intervenciones) el 03/12/2020 05:12:36
ejemplo simplificado de lo que quiero hacer:

1
2
3
4
5
6
7
8
9
10
11
class Punto2D{
int x,y;
}
 
class Polygono2D{
int posX, posY;
std::vector<Punto2D> vertices;
}
 
Polygono2D polygon1;
polygono2D polygon2;

¿ como hacer esto?
1
polygon 2 = polygon1;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

como hacer sobrecarga operador =

Publicado por Martín (158 intervenciones) el 03/12/2020 11:54:48
Si esperas una respuesta cuidada, deberías poner cuidado en la pregunta.

Si no te importa, espera y conseguirás una respuesta al mismo nivel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

como hacer sobrecarga operador =

Publicado por Alfil (1444 intervenciones) el 03/12/2020 16:02:55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <vector>
 
class Punto2D
{
    public:
        Punto2D(int x, int y);
 
        void setX(int x);
        void setY(int y);
        int getX() const;
        int getY()const;
 
    private:
        int x;
        int y;
};
 
class Poligono2D
{
    public:
        Poligono2D(int x, int y);
 
        void imprimeVertices();
        void agreagarVertice(int x, int y);
        Poligono2D operator=(const Poligono2D& p);
 
    private:
        std::vector<Punto2D> vertices;
};
 
Punto2D::Punto2D(int x, int y)
: x(x)
, y(y)
{
}
 
void Punto2D::setX(int x)
{
    x = x;
}
 
void Punto2D::setY(int y)
{
    y = y;
}
 
int Punto2D::getX() const
{
    return x;
}
 
int Punto2D::getY() const
{
    return y;
}
 
Poligono2D::Poligono2D(int x, int y)
{
    vertices.push_back(Punto2D(x, y));
}
 
void Poligono2D::imprimeVertices()
{
    for (size_t i = 0; i < vertices.size(); i++)
    {
        std::cout << "(" << vertices[i].getX() << ", " << vertices[i].getY() << ") ";
    }
}
 
void Poligono2D::agreagarVertice(int x, int y)
{
    this->vertices.push_back(Punto2D(x, y));
}
 
Poligono2D Poligono2D::operator=(const Poligono2D& p)
{
    this->vertices = p.vertices;
 
    return *this;
}
 
int main()
{
    Poligono2D p1(5, 2);
    p1.agreagarVertice(4, 3);
    std::cout << "\np1: ";
    p1.imprimeVertices();
 
    Poligono2D p2(6, 3);
    std::cout << "\np2: ";
    p2.imprimeVertices();
 
    std::cout << "\nDespues de p2 = p1: ";
    p2 = p1;
    p2.imprimeVertices();
 
    std::cout << std::endl;
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

como hacer sobrecarga operador =

Publicado por Martín (158 intervenciones) el 04/12/2020 13:47:44
En
1
2
3
4
5
6
Poligono2D Poligono2D::operator=(const Poligono2D& p)
{
    this->vertices = p.vertices;
 
    return *this;
}

El operador de asignación debe devolver una referencia:
1
Poligono2D&  Poligono2D::operator=(const Poligono2D& p);

También falta la comprobación de auto asignación, normalmente con la guarda
1
if(&p == this) return *this;

Aunque sin lugar a duda, en este caso no tiene sentido definir este operador porque el compilador generará uno inline y sin errores.

Pero de todos modos está bastante bien, considerando el nivel de la pregunta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar