fork download
  1. #include <iostream>
  2.  
  3. template <std::size_t SideCount, typename T>
  4. class EquilateralPolygon
  5. {
  6. public:
  7. explicit EquilateralPolygon(T sideLength) : sideLength(sideLength) {}
  8. std::size_t GetSideCount() const { return SideCount; }
  9. T GetSideLength() const { return sideLength; }
  10.  
  11. T calculatePerimeter() const { return SideCount * sideLength; }
  12. private:
  13. T sideLength;
  14. };
  15.  
  16. template <std::size_t SideCount, typename T>
  17. void displayPerimeter(const EquilateralPolygon<SideCount, T>& p) {
  18. std::cout << "perimeter length: " << p.calculatePerimeter() << std::endl;
  19. }
  20.  
  21. using EquilateralTriangle = EquilateralPolygon<3, std::size_t>;
  22. using Square = EquilateralPolygon<4, std::size_t>;
  23.  
  24.  
  25. int main() {
  26. Square s(5);
  27. std::cout << "number of sides a square has: " << s.GetSideCount() << std::endl;
  28.  
  29. EquilateralTriangle t(5);
  30. std::cout << "number of sides a triangle has: " << t.GetSideCount() << std::endl;
  31.  
  32. displayPerimeter(s);
  33. displayPerimeter(t);
  34. }
  35.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
number of sides a square has: 4
number of sides a triangle has: 3
perimeter length: 20
perimeter length: 15