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 tu as appris sur le polymorphisme. Tu vas créer une classe abstraite Shape et implémenter des formes concrètes qui calculent leur aire et leur périmètre, le tout accessible via une interface commune.

Tu vas organiser ton code sur quatre fichiers :

  • Shape.h : définir une classe abstraite Shape qui sert de modèle à toutes les formes. Ta classe de base doit avoir :
    • un membre std::string name protégé pour identifier la forme
    • un constructeur qui initialise le nom
    • des méthodes virtuelles pures area() et perimeter() qui renvoient un double
    • une méthode getName() qui renvoie le nom de la forme
    • un destructeur virtuel
  • Circle.h : implémenter une classe Circle qui hérite de Shape :
    • un membre privé double radius
    • un constructeur prenant le rayon (définir le nom sur "Circle")
    • implémenter area() à l'aide de la formule : 3.14159 * radius * radius
    • implémenter perimeter() à l'aide de : 2 * 3.14159 * radius
  • Rectangle.h : implémenter 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éfinir le nom sur "Rectangle")
    • implémenter area() comme width * height
    • implémenter perimeter() comme 2 * (width + height)
  • main.cpp : lire quatre valeurs (chacune sur une ligne distincte) :
    1. rayon du cercle (double)
    2. largeur du rectangle (double)
    3. hauteur du rectangle (double)
    4. rayon du deuxième cercle (double)

    Créer dynamiquement les trois formes et les stocker dans un tableau de pointeurs Shape*. Parcourir le tableau et, pour chaque forme, afficher ses informations dans ce format :

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

    Afficher une ligne vide entre chaque forme. Libérer les 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

Remarque que la même logique printShapeInfo fonctionne pour n'importe quel type de forme. C'est la puissance du polymorphisme. Ton code traite les cercles et les rectangles de manière identique via l'interface Shape, et chaque forme sait comment calculer ses propres mesures. Utilise le mot-clé override sur toutes les méthodes redéfinies afin de garantir des signatures de fonctions 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 les 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 infos de chaque forme
    // Format :
    // <name> :
    //   Aire : <area>
    //   Périmètre : <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

Entraînez-vous par vous-même : Compilateur C++ en ligne