Implementación del círculo
Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 45 de 61.
Desafío
FácilContinuemos 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 baseShapede la lección anterior con los tipos de puntero a funciónDrawFuncyAreaFunc.circle.h: Define tu estructuraCircleaquí. Un círculo incorporaShapecomo su primer miembro (permitiendo la regla del primer miembro para el upcasting) y añade un camporadiusde tipodouble. Declara una función constructoracreate_circleque tome un radio y devuelva unCirclepor 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² (usa3.14159para π)create_circle— inicializa unCircle, conecta los punteros a función de laShapeincorporada para que apunten adraw_circleyarea_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 adrawcomo aareaa través de los punteros a función de laShapeincorporada. 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.54Ejemplo de salida cuando la entrada es 3.5:
Drawing Circle with radius: 3.50
Area: 38.48La 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
1Fundamentos de programación modular
Archivos de cabeceraGuardas de inclusiónArchivos fuenteFunciones estáticasRepaso: Calculadora modular4Encapsulamiento
Concepto de punteros opacosDefinición de structs opacosGetters y SettersValidación en settersResumen: Caja secreta7Punteros a funciones
Declaración de punteros a funcionesLlamada a punteros a funcionesTypedef para punteros a funcionesPasar funciones como argumentosRepaso: Dispatch de calculadora10Contenedores genéricos
Repaso de punteros voidWrapper genéricoSwap genéricoComparación genéricaRepaso: Array genérico2Objetos y métodos
Structs como objetosEl puntero 'Self'Const CorrectnessPuntero vs. ValorMétodos auxiliaresResumen: Point Manager5Proyecto: Cuenta bancaria simple
Configuración del proyectoImplementación de la cuenta3Ciclo de vida de los objetos
Patrón ConstructorPatrón DestructorInicialización en StackCopia profundaResumen: String Wrapper6Herencia mediante composición
Incrustación de StructsLa regla del primer miembroAcceso a miembros padreUpcastingResumen: Jerarquía de formas9Proyecto: Dibujador de figuras
Descripción general del proyectoImplementación del círculo