Menu
Coddy logo textTech

Resumen: Calculadora de figuras

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 63 de 104.

challenge icon

Desafío

Fácil

Vamos a construir una calculadora de formas que reúna todo lo que has aprendido sobre el polimorfismo. Crearás una clase abstracta Shape e implementarás formas concretas que calculen su área y perímetro, todas accesibles a través de una interfaz común.

Organizarás tu código en cuatro archivos:

  • Shape.h: Define una clase abstracta Shape que sirva como plano para todas las formas. Tu clase base debe tener:
    • Un miembro protegido std::string name para identificar la forma
    • Un constructor que inicialice el nombre
    • Métodos virtuales puros area() y perimeter() que devuelvan double
    • Un método getName() que devuelva el nombre de la forma
    • Un destructor virtual
  • Circle.h: Implementa una clase Circle que herede de Shape:
    • Un miembro privado double radius
    • Un constructor que reciba el radio (establece el nombre como "Circle")
    • Implementa area() usando la fórmula: 3.14159 * radius * radius
    • Implementa perimeter() usando: 2 * 3.14159 * radius
  • Rectangle.h: Implementa una clase Rectangle que herede de Shape:
    • Miembros privados double width y double height
    • Un constructor que reciba el ancho y el alto (establece el nombre como "Rectangle")
    • Implementa area() como width * height
    • Implementa perimeter() como 2 * (width + height)
  • main.cpp: Lee cuatro entradas (cada una en una línea separada):
    1. Radio del círculo (double)
    2. Ancho del rectángulo (double)
    3. Alto del rectángulo (double)
    4. Radio del segundo círculo (double)

    Crea las tres formas dinámicamente y almacénalas en un arreglo de punteros Shape*. Recorre el arreglo y, para cada forma, imprime su información en este formato:

    <name>:
      Area: <area>
      Perimeter: <perimeter>

    Imprime una línea en blanco entre cada forma. Limpia tus objetos asignados dinámicamente cuando termines.

Por ejemplo, con las entradas 5, 4, 6, y 3:

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

Observa cómo la misma lógica de printShapeInfo funciona para cualquier tipo de forma; este es el poder del polimorfismo. Tu código procesa círculos y rectángulos de manera idéntica a través de la interfaz Shape, y cada forma sabe cómo calcular sus propias medidas. Utiliza la palabra clave override en todos los métodos sobrescritos para asegurar firmas de función correctas.

Pruébalo tú mismo

#include <iostream>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"

using namespace std;

int main() {
    // Leer entradas
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: Crear un arreglo de punteros Shape* con 3 elementos
    // Shape* shapes[3];

    // TODO: Crear formas dinámicamente y almacenarlas en el arreglo
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Recorrer el arreglo e imprimir la información de cada forma
    // Formato:
    // <name>:
    //   Area: <area>
    //   Perimeter: <perimeter>
    // (línea en blanco entre formas, pero no después de la última)

    // TODO: Limpiar los objetos asignados dinámicamente
    // delete shapes[i];

    return 0;
}

Todas las lecciones de Programación Orientada a Objetos