Menu
Coddy logo textTech

Implementación del círculo

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

challenge icon

Desafío

Fácil

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

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

  • shape.h: Conserva aquí tu interfaz base Shape de la lección anterior, con los tipos de puntero a función DrawFunc y AreaFunc.
  • circle.h: Define aquí tu estructura Circle. Un círculo incorpora Shape como su primer miembro (lo que habilita la regla del primer miembro para la conversión ascendente) y añade un campo radius de tipo double. Declara una función constructora create_circle que reciba un radio y devuelva un Circle por valor.
  • circle.c: Implementa aquí el comportamiento específico del círculo:
    • draw_circle: imprime Drawing Circle with radius: X.XX (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 Shape incorporados 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 y después llama tanto a draw como a area mediante los punteros a función de Shape incorporados. Imprime el área con 2 decimales.

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

Salida de ejemplo cuando la entrada es 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Salida de ejemplo cuando la entrada es 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

La idea clave es que Circle contiene un Shape como su primer miembro, por lo que puedes acceder a los punteros a función mediante circle.base.draw y circle.base.area (o como denomines 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 encabezado.

Pruébalo tú mismo

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Crea un Circle usando create_circle
    
    // 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
    // e imprime 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