// II17 2005-06 // Tema2/Poligono.cpp // 09-11-2005, 18-11-2005 #include using namespace std; #include "Poligono.h" Poligono::Poligono () : numVertices(0), vertices(NULL){ } void Poligono::Leer() { Liberar(); // Si existia un vector de vertices previo, se libera cout << "Digame el numero de vertices: "; cin >> numVertices; if (numVertices <= 0) numVertices = 0; else { vertices = new Punto[numVertices]; for (int i = 0; i < numVertices; i++) { cout << "Digame las coordenadas del vertice " << i+1 <<":" << endl; vertices[i].Leer(); } } } void Poligono::Ver() const { cout << "{"; for (int i=0; i < numVertices; i++) vertices[i].Ver(); cout << "}"; } void Poligono::Trasladar(float tx, float ty){ for (int i = 0; i < numVertices; i++) vertices[i].Trasladar(tx, ty); } float Poligono::Perimetro () const { if (vertices == NULL) return 0; float perimetro = vertices[numVertices-1].Distancia(vertices[0]); for (int i = 0; i < numVertices -1; i++) perimetro += vertices[i].Distancia (vertices[i+1]); return perimetro; } void Poligono::Liberar () { delete [] vertices; vertices = NULL; numVertices = 0; } Poligono::~Poligono () { Liberar(); } Poligono & Poligono::operator= (const Poligono &p) { if (this != &p) { Liberar(); // Si existia un vector de vertices previo, se libera // Otra solucion: this->~Poligono(); // Otra solucion: delete [] vertices; vertices = NULL; numVertices = 0; if (p.vertices != NULL) { numVertices = p.numVertices; vertices = new Punto[numVertices]; for (int i=0; i < numVertices; i++) vertices[i] = p.vertices[i]; } } return *this; } Poligono::Poligono(const Poligono &p) : numVertices(0), vertices(NULL) { *this = p; } // Otra solucion: // Poligono::Poligono(const Poligono &p) { // if (p.vertices != NULL) { // numVertices = p.numVertices; // vertices = new Punto[numVertices]; // for (int i=0; i < numVertices; i++) // vertices[i] = p.vertices[i]; // } else { // numVertices = 0; // vertices = NULL; // } // }