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

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

Organizarás tu código en cuatro archivos:

  • Shape.h: Define una clase abstracta Shape que sirve como modelo para todas las figuras. Tu clase base debe tener:
    • Un miembro protegido std::string name para identificar la figura
    • 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 figura
    • 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 la altura (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. Altura del rectángulo (double)
    4. Radio del segundo círculo (double)

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

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

    Imprime una línea en blanco entre cada figura. Libera los 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 figura. Este es el poder del polimorfismo. Tu código procesa círculos y rectángulos de forma idéntica mediante la interfaz Shape, y cada figura sabe cómo calcular sus propias medidas. Usa la palabra clave override en todos los métodos sobrescritos para garantizar 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: Crea un array de punteros Shape* con 3 elementos
    // Shape* shapes[3];

    // TODO: Crea las formas dinámicamente y almacénalas en el array
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Recorre el array e imprime la información de cada forma
    // Formato:
    // <name>:
    //   Área: <area>
    //   Perímetro: <perimeter>
    // (línea en blanco entre las formas, pero no después de la última)

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

    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C++ online