Menu
Coddy logo textTech

Resumen: Jerarquía de formas

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 32 de 61.

challenge icon

Desafío

Fácil

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

Organizarás tu código en tres archivos:

  • shape.h: Define tu jerarquía de estructuras con protecciones contra inclusiones múltiples. Crea una estructura Shape con un único campo color (un entero). Después, define una estructura Rect que incluya 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, incluido su color heredado.
  • main.c: Crea un Rect e inicializa todos sus campos. Después, demuestra el upcasting llamando a set_color con tu rectángulo convertido a Shape*. Finalmente, imprime el rectángulo para verificar que el color se modificó mediante el puntero al tipo base.

Recibirás cuatro entradas: el ancho del rectángulo, su alto, un color inicial y un nuevo color que se establecerá mediante la función genérica.

En tu archivo principal, crea el rectángulo con los valores iniciales; después, 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 los rectángulos. Solo trabaja con Shape. Sin embargo, mediante la regla del primer miembro y el upcasting, el color de tu rectángulo se modifica mediante 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: Crea un Rect e inicializa todos sus campos
    // (width, height, y el color del Shape embebido con initial_color)
    
    // TODO: Llama a set_color con el rectángulo casteado a Shape*
    // para cambiar el color a new_color
    
    // TODO: Llama a print_rect para mostrar el resultado
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online