Menu
Coddy logo textTech

Récapitulatif - Calculateur de formes

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 63 sur 104.

challenge icon

Défi

Facile

Construisons un calculateur de formes qui rassemble tout ce que vous avez appris sur le polymorphisme. Vous allez créer une classe abstraite Shape et implémenter des formes concrètes qui calculent leur aire et leur périmètre, toutes accessibles via une interface commune.

Vous organiserez votre code sur quatre fichiers :

  • Shape.h : Définissez une classe abstraite Shape qui sert de modèle pour toutes les formes. Votre classe de base doit avoir :
    • Un membre protégé std::string name pour identifier la forme
    • Un constructeur qui initialise le nom
    • Des méthodes virtuelles pures area() et perimeter() qui retournent un double
    • Une méthode getName() qui retourne le nom de la forme
    • Un destructeur virtuel
  • Circle.h : Implémentez une classe Circle qui hérite de Shape :
    • Un membre privé double radius
    • Un constructeur prenant le rayon (définissez le nom à "Circle")
    • Implémentez area() en utilisant la formule : 3.14159 * radius * radius
    • Implémentez perimeter() en utilisant : 2 * 3.14159 * radius
  • Rectangle.h : Implémentez une classe Rectangle qui hérite de Shape :
    • Des membres privés double width et double height
    • Un constructeur prenant la largeur et la hauteur (définissez le nom à "Rectangle")
    • Implémentez area() comme width * height
    • Implémentez perimeter() comme 2 * (width + height)
  • main.cpp : Lisez quatre entrées (chacune sur une ligne séparée) :
    1. Rayon du cercle (double)
    2. Largeur du rectangle (double)
    3. Hauteur du rectangle (double)
    4. Rayon du second cercle (double)

    Créez les trois formes dynamiquement et stockez-les dans un tableau de pointeurs Shape*. Parcourez le tableau et, pour chaque forme, affichez ses informations dans ce format :

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

    Affichez une ligne vide entre chaque forme. Libérez vos objets alloués dynamiquement une fois terminé.

Par exemple, avec les entrées 5, 4, 6, et 3 :

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

Remarquez comment la même logique printShapeInfo fonctionne pour n'importe quel type de forme — c'est la puissance du polymorphisme. Votre code traite les cercles et les rectangles de manière identique via l'interface Shape, et chaque forme sait comment calculer ses propres mesures. Utilisez le mot-clé override sur toutes les méthodes redéfinies pour garantir des signatures de fonction correctes.

Essayez vous-même

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

using namespace std;

int main() {
    // Lire les entrées
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: Créer un tableau de pointeurs Shape* avec 3 éléments
    // Shape* shapes[3];

    // TODO: Créer des formes dynamiquement et les stocker dans le tableau
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Parcourir le tableau et afficher les informations de chaque forme
    // Format :
    // <name> :
    //   Area: <area>
    //   Perimeter: <perimeter>
    // (ligne vide entre les formes, mais pas après la dernière)

    // TODO: Nettoyer les objets alloués dynamiquement
    // delete shapes[i];

    return 0;
}

Toutes les leçons de Programmation Orientée Objet