Menu
Coddy logo textTech

Implementación del rectángulo

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

challenge icon

Desafío

Fácil

Continuemos construyendo el proyecto Shape Drawer implementando Rectangle: otra forma concreta que incorpora la estructura base Shape, tal como hicimos con Circle.

Partiendo de tu proyecto existente, añadirás funcionalidad para rectángulos en estos archivos:

  • shape.h: Conserva tu interfaz base Shape con los tipos de puntero a función DrawFunc y AreaFunc de las lecciones anteriores.
  • circle.h y circle.c: Conserva tu implementación de Circle de la lección anterior.
  • rectangle.h: Define aquí tu estructura Rectangle. Un rectángulo incorpora Shape como su primer miembro y añade los campos width y height (ambos double). Declara una función constructora create_rectangle que reciba parámetros de ancho y alto y devuelva un Rectangle por valor.
  • rectangle.c: Implementa el comportamiento específico del rectángulo:
    • draw_rectangle: imprime Drawing Rectangle with width: X.XX and height: X.XX (ambos valores se muestran con 2 decimales)
    • area_rectangle: devuelve ancho × alto
    • create_rectangle: inicializa un Rectangle, conecta los punteros a función del Shape incorporado con las funciones del rectángulo, establece las dimensiones y devuelve el rectángulo
  • main.c: Demuestra el funcionamiento de ambas formas a través de la misma interfaz. Lee dos entradas: el ancho y el alto de un rectángulo. Crea un rectángulo usando tu constructor y, después, llama a draw y area a través de los punteros a función del Shape incorporado. Imprime el área con 2 decimales.

Tu programa recibirá dos entradas: valores de width y height (como números de punto flotante).

Salida de ejemplo cuando las entradas son 4.0 y 3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

Salida de ejemplo cuando las entradas son 7.5 y 2.5:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Al igual que con Circle, Rectangle incorpora Shape como su primer miembro, lo que te permite acceder a los punteros a función a través del miembro incorporado. Este patrón coherente es lo que permite el polimorfismo: ambas formas pueden tratarse uniformemente a través de su interfaz Shape. Recuerda usar protectores de inclusión en todos los archivos de cabecera.

Pruébalo tú mismo

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

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: Crea un rectángulo usando create_rectangle(width, height)
    
    // TODO: Llama a draw a través del puntero a función del Shape embebido
    
    // TODO: Llama a area a través del puntero a función del Shape embebido
    // TODO: Imprime el área con 2 decimales: "Area: %.2f\n"
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online