Menu
Coddy logo textTech

Resumen: Jerarquía de formas

Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 32 de 61.

challenge icon

Desafío

Fácil

Vamos a construir una jerarquía de formas completa que demuestre el poder de la herencia a través de la composición. Crearás un tipo base Shape del cual cualquier forma específica pueda heredar, y luego construirás un Rect que lo extienda.

Organizarás tu código en tres archivos:

  • shape.h: Define tu jerarquía de estructuras con guardas de inclusión. Crea una estructura Shape con un único campo color (un entero). Luego define una estructura Rect que embeba Shape como su primer miembro y añada los campos width y height (ambos enteros). Declara dos funciones: set_color que recibe un Shape* y un nuevo valor de color, y print_rect que recibe un Rect*.
  • shape.c: Implementa ambas funciones. Tu función set_color trabaja con el tipo base: modifica el color de cualquier forma. Tu función print_rect muestra toda la información del rectángulo, incluyendo su color heredado.
  • main.c: Crea un Rect e inicializa todos sus campos. Luego demuestra el upcasting llamando a set_color con tu rectángulo convertido a un Shape*. Finalmente, imprime el rectángulo para verificar que el color fue cambiado a través del puntero del tipo base.

Recibirás cuatro entradas: el width del rectángulo, su height, un initial color, y un new color para asignar a través de la función genérica.

En tu archivo principal, crea el rectángulo con los valores iniciales, luego usa set_color para cambiar su color al nuevo valor (recuerda convertir tu Rect* a Shape*), y finalmente llama a print_rect para mostrar el resultado.

Tu salida debería verse así:

Width: 10
Height: 5
Color: 7

Donde 10 es el ancho, 5 es el alto, y 7 es el color actualizado (no el color inicial). La idea clave aquí es que set_color no sabe nada sobre rectángulos; solo trabaja con Shape. Sin embargo, a través de la regla del primer miembro y el upcasting, el color de tu rectángulo se modifica a través de esta función genérica.

Pruébalo tú mismo

#include <stdio.h>
#include "shape.h"

int main() {
    int width, height, initial_color, new_color;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &initial_color);
    scanf("%d", &new_color);
    
    // TODO: Crear un Rect e inicializar todos sus campos
    // (width, height, y el color de la Shape incrustada con initial_color)
    
    // TODO: Llamar a set_color con el rectángulo convertido a Shape*
    // para cambiar el color a new_color
    
    // TODO: Llamar a print_rect para mostrar el resultado
    
    return 0;
}

Todas las lecciones de Object Oriented Programming