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.
Desafío
FácilContinuemos 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 baseShapede la lección anterior, con los tipos de puntero a funciónDrawFuncyAreaFunc.circle.h: Define aquí tu estructuraCircle. Un círculo incorporaShapecomo su primer miembro (lo que habilita la regla del primer miembro para la conversión ascendente) y añade un camporadiusde tipodouble. Declara una función constructoracreate_circleque reciba un radio y devuelva unCirclepor valor.circle.c: Implementa aquí el comportamiento específico del círculo:draw_circle: imprimeDrawing Circle with radius: X.XX(el radio se muestra con 2 decimales)area_circle: devuelve π × radio² (usa3.14159para π)create_circle: inicializa unCircle, conecta los punteros a función deShapeincorporados 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 y después llama tanto adrawcomo aareamediante los punteros a función deShapeincorporados. 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.54Salida de ejemplo cuando la entrada es 3.5:
Drawing Circle with radius: 3.50
Area: 38.48La 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
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írculoImplementación del rectánguloUso polimórficoContenedor de figurasPractica por tu cuenta: Compilador de C online