Menu
Coddy logo textTech

Implementación del círculo

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

challenge icon

Desafío

Fácil

Continuemos construyendo el proyecto Shape Drawer implementando el Circle — una forma concreta que incorpora la estructura base Shape y proporciona su propia lógica de dibujo y área.

Basándote en los cimientos de la lección anterior, ampliarás tu proyecto con estos archivos:

  • shape.h: Mantén tu interfaz base Shape de la lección anterior con los tipos de puntero a función DrawFunc y AreaFunc.
  • circle.h: Define tu estructura Circle aquí. Un círculo incorpora Shape como su primer miembro (permitiendo la regla del primer miembro para el upcasting) y añade un campo radius de tipo double. Declara una función constructora create_circle que tome un radio y devuelva un Circle por valor.
  • circle.c: Implementa el comportamiento específico del círculo aquí:
    • draw_circle — imprime "Drawing Circle with radius: %.2f\n" (el radio se muestra con 2 decimales)
    • area_circle — devuelve π × radio² (usa 3.14159 para π)
    • create_circle — inicializa un Circle, conecta los punteros a función de la Shape incorporada para que apunten a draw_circle y area_circle, establece el radio y devuelve el círculo
  • main.c: Reúne todo. Lee un valor de radio como entrada, crea un círculo usando tu constructor, luego llama tanto a draw como a area a través de los punteros a función de la Shape incorporada. Imprime el área con 2 decimales.

Tu programa recibirá una entrada: un valor de radius (como un número de punto flotante).

Ejemplo de salida cuando la entrada es 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Ejemplo de salida cuando la entrada es 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

La idea clave es que Circle contiene una Shape como su primer miembro, por lo que puedes acceder a los punteros a función a través de circle.base.draw y circle.base.area (o como nombres al miembro incorporado). Al llamar a estas funciones, pasa un puntero al miembro Shape. Recuerda usar guardas de inclusión en todos los archivos de cabecera.

Pruébalo tú mismo

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Crear un Circle usando create_circle
    
    // TODO: Llamar a draw a través del puntero de función de la Shape incrustada
    
    // TODO: Llamar a area a través del puntero de función de la Shape incrustada
    // e imprimir con 2 decimales: "Area: %.2f\n"
    
    return 0;
}

Todas las lecciones de Object Oriented Programming