#
# Opciones para el compilador.
-#CXXFLAGS=-ansi -pedantic -Wall -O3
-CXXFLAGS=-ansi -pedantic -Wall -g3 -DDEBUG
+CXXFLAGS=-ansi -pedantic -Wall -O3
+#CXXFLAGS=-ansi -pedantic -Wall -g3 -DDEBUG
# Pruebas.
-TESTS=
+TESTS=dllist_test
# Programa a compilar.
TARGETS=$(TESTS) tp3
# Pruebas.
tests: $(TESTS)
+ ./dllist_test
dllist_test: dllist.o
-memdebug_test: dllist.o meminfo.o memdebug.o
+tp3: dllist.o figura.o rectangulo.o cuadrado.o linea.o circulo.o dibujo.o
+
+dllist.o: dllist.cpp dllist.h
+
+figura.o: figura.cpp figura.h punto.h
+
+linea.o: figura.o linea.cpp linea.h
+
+circulo.o: figura.o circulo.cpp circulo.h
+
+rectangulo.o: figura.o rectangulo.cpp rectangulo.h
+
+cuadrado.o: rectangulo.o cuadrado.cpp cuadrado.h
+
+dibujo.o: dllist.o figura.o dibujo.cpp dibujo.h
+
-parser_equation_test: dllist.o strutil.o meminfo.o memdebug.o parseerror.o
# Regla para borrar.
clean:
}
void Circulo::dibujar(std::ostream& out) const {
+ out << "Circulo(";
Figura::dibujar(out);
- out << ", radio: " << radio;
+ out << ", radio(" << radio << "))";
}
// Dibujo cada elemento.
for (Figura* f = static_cast<Figura*>(figuras.begin());
figuras.have_more(); f = static_cast<Figura*>(figuras.next())) {
+ out << "Dibujando: ";
f->dibujar(out);
out << std::endl;
}
#endif
Figura::Figura(size_t color, size_t grosor, const Punto& centro,
- const char* nombre): color(color), grosor(grosor), centro(centro) {
+ const char* nombre): centro(centro) {
+ if (color > 15) {
+ this->color = 15;
+ } else if (color < 0) {
+ this->color = 0;
+ } else {
+ this->color = color;
+ }
+ if (grosor > 10) {
+ this->grosor = 10;
+ } else if (grosor < 1) {
+ this->grosor = 1;
+ } else {
+ this->grosor = grosor;
+ }
#ifdef DEBUG
std::cerr << "En constructor de Figura." << std::endl;
#endif
}
void Figura::dibujar(std::ostream& out) const {
- out << "color: " << color << ", grosor: " << grosor
- << ", nombre: " << nombre << ", centro: ";
+ out << "color(" << color << "), grosor(" << grosor
+ << "), nombre(" << nombre << "), centro(";
centro.dibujar(out);
+ out << ")";
}
}
void Linea::dibujar(std::ostream& out) const {
+ out << "Linea(";
Figura::dibujar(out);
- out << ", ini: ";
+ out << ", ini(";
ini.dibujar(out);
- out << ", fin: ";
+ out << "), fin(";
fin.dibujar(out);
+ out << "))";
}
#endif
}
+ /// Constructor de copia.
+ Punto(const Punto& p): x(p.x), y(p.y) {
+#ifdef DEBUG
+ std::cerr << "En constructor de copia de Punto." << std::endl;
+#endif
+ }
+
/// Destructor.
virtual ~Punto(void) {
#ifdef DEBUG
/// Dibuja un punto.
virtual void dibujar(std::ostream& out) const {
- out << "(" << x << "," << y << ")";
+ out << "Punto(" << x << ", " << y << ")";
}
};
}
void Rectangulo::dibujar(std::ostream& out) const {
+ out << "Rectangulo(";
Figura::dibujar(out);
- out << ", ancho: " << ancho << ", alto: " << alto;
+ out << ", ancho(" << ancho << "), alto(" << alto << "))";
}
--- /dev/null
+/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Ejercicio Número 3:
+ * Lista de figuras.
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: sáb sep 20 19:52:13 ART 2003
+ *
+ * $Id$
+ */
+
+#include "dibujo.h"
+#include "rectangulo.h"
+#include "cuadrado.h"
+#include "linea.h"
+#include "circulo.h"
+#include <iostream>
+
+/**
+ * Programa para probar la DLList.
+ *
+ * \return EXIT_SUCCESS o código de error devuelto por abort() si hubo un
+ * error.
+ */
+int main(void) {
+ Dibujo dibujo;
+
+ // Creo y agrego un rectángulo.
+ dibujo.agregar_figura(new Rectangulo(1, 10, Punto(1.1, -0.4),
+ "rectángulo 1", 20.5, 10.2));
+
+ // Creo y agrego un cuadrado.
+ dibujo.agregar_figura(new Cuadrado(0, 210, Punto(1.1, -0.4), "cuadrado 1",
+ 0.25));
+
+ // Creo y agrego una línea.
+ dibujo.agregar_figura(new Linea(120, 0, Punto(1.1, -0.4), "línea 1",
+ Punto(11.5, -10.4), Punto(0, 0)));
+
+ // Creo y agrego un círculo.
+ dibujo.agregar_figura(new Circulo(4, 8, Punto(1.1, -0.4), "círculo 1",
+ 12.25));
+
+ // Dibujo y libero todo.
+ dibujo.dibujar(std::cout);
+ dibujo.borrar_todo();
+
+ return EXIT_SUCCESS;
+}
+