1*70ec8419SPeterChou1 #pragma once 2*70ec8419SPeterChou1 3*70ec8419SPeterChou1 /** 4*70ec8419SPeterChou1 * @brief Abstract base class for shapes. 5*70ec8419SPeterChou1 * 6*70ec8419SPeterChou1 * Provides a common interface for different types of shapes. 7*70ec8419SPeterChou1 */ 8*70ec8419SPeterChou1 class Shape { 9*70ec8419SPeterChou1 public: 10*70ec8419SPeterChou1 /** 11*70ec8419SPeterChou1 * @brief Virtual destructor. 12*70ec8419SPeterChou1 */ ~Shape()13*70ec8419SPeterChou1 virtual ~Shape() {} 14*70ec8419SPeterChou1 15*70ec8419SPeterChou1 /** 16*70ec8419SPeterChou1 * @brief Calculates the area of the shape. 17*70ec8419SPeterChou1 * 18*70ec8419SPeterChou1 * @return double The area of the shape. 19*70ec8419SPeterChou1 */ 20*70ec8419SPeterChou1 virtual double area() const = 0; 21*70ec8419SPeterChou1 22*70ec8419SPeterChou1 /** 23*70ec8419SPeterChou1 * @brief Calculates the perimeter of the shape. 24*70ec8419SPeterChou1 * 25*70ec8419SPeterChou1 * @return double The perimeter of the shape. 26*70ec8419SPeterChou1 */ 27*70ec8419SPeterChou1 virtual double perimeter() const = 0; 28*70ec8419SPeterChou1 }; 29*70ec8419SPeterChou1 30*70ec8419SPeterChou1 31