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.
Desafío
FácilContinuemos 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 baseShapecon los tipos de puntero a funciónDrawFuncyAreaFuncde las lecciones anteriores.circle.hycircle.c: Conserva tu implementación de Circle de la lección anterior.rectangle.h: Define aquí tu estructuraRectangle. Un rectángulo incorporaShapecomo su primer miembro y añade los camposwidthyheight(ambosdouble). Declara una función constructoracreate_rectangleque reciba parámetros de ancho y alto y devuelva unRectanglepor valor.rectangle.c: Implementa el comportamiento específico del rectángulo:draw_rectangle: imprimeDrawing Rectangle with width: X.XX and height: X.XX(ambos valores se muestran con 2 decimales)area_rectangle: devuelve ancho × altocreate_rectangle: inicializa unRectangle, conecta los punteros a función delShapeincorporado 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 adrawyareaa través de los punteros a función delShapeincorporado. 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.00Salida de ejemplo cuando las entradas son 7.5 y 2.5:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Al 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
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