Lab - Herencia y polimorfismo
- 
El código de este laboratorio ha sido probado en linux. No estoy seguro si funciona en otros sistemas operativos.
 - 
Instala
libsdl2-devusandosudo apt install libsdl2-dev - 
Descarga el código para este laboratorio de: https://bitbucket.org/raarceupr/polyrect.
 - 
El programa incluido en
main.cppcrea una ventana donde muestra unos rectángulos moviendose hacia la derecha. Compílalo y córrelo (en linux) para validar que funciona. - 
La función
main()crea los rectángulos:int main(int, char**) { gui myGUI; Rectangle rect1(ImVec2(100,100),ImVec2(150,250)); Rectangle rect2(ImVec2(200,300),ImVec2(250,350)); myGUI.addRectangle(&rect1); myGUI.addRectangle(&rect2); myGUI.show(); } - 
Explicación de las instrucciones en
main():gui myGUI;- crea un objeto clase gui al que añadiremos los rectangulos para que salgan en pantalla- Luego creamos dos objetos (
rect1yrect2) de claseRectangleespecificando las coordenadas de la esquina superior izquierda e inferior derecha.Im2Veces una estructura para guardar pares ordenados de números. La estamos usando para representar cada uno de los puntos. - Pasamos las direcciones de esos dos objetos 
rect1yrect2al GUI usando la funciónaddRectangle(). - Invocamos a 
show()para que el GUI despliegue la ventana y los rectángulos. 
 - 
Una vez invocado
show()el GUI toma control del programa y se queda en un loop donde en cada vuelta invoca la funciónmove()de cada rectángulo y lo añade a la lista de cosas a dibujar (draw_list->AddRect). Puedes ver ese loop dentro de la funciónshow()de la clasegui:for (auto r: rectangles) { r->move(); draw_list->AddRect(r->pa, r->pb, col32, 0.0f, ImDrawCornerFlags_All, 1.0f); }La razón por la que los rectángulos se mueven hacia la derecha es porque la función
move()incrementa la coordenadaxde las esquinas del rectángulo. 
Ejercicio
- 
Convierte la función
move()de la claseRectanglea una puramente virtual. - 
Crea cuatro clases derivadas de la clase
Rectangle:LeftRectangle- se mueve hacia la izquierdaRightRectangle- se mueve hacia la derechaUpRectangle- se mueve hacia arribaDownRectangle- se mueve hacia abajo
 - 
Crea al menos un objeto de cada una de las nuevas clases y añadelos al GUI (usando
addRectangle()). Como ejemplo, el vídeo que mostramos a continuación muestra el resultado del siguientemain():RightRectangle rect1(ImVec2(0,0),ImVec2(100,200)); LeftRectangle rect2(ImVec2(500,100),ImVec2(550,200)); UpRectangle rect3(ImVec2(500,400),ImVec2(550,450)); DownRectangle rect4(ImVec2(100,150),ImVec2(150,200)); myGUI.addRectangle(&rect1); myGUI.addRectangle(&rect2); myGUI.addRectangle(&rect3); myGUI.addRectangle(&rect4);