Basics of C/C++ Programming Practice 7 Code

From EIK wiki
Shape
shape.h
 #pragma once
 
 class Shape
 {
 protected:
   int numAngles;
 
 public:
   Shape(int angles);
   virtual ~Shape();
 
   int getNumAngles();
 
   virtual double area() = 0;
 };
shape.cpp
 #include "Shape.h"
 
 Shape::Shape(int angles) : numAngles(angles)
 {
 }
 
 Shape::~Shape()
 {
 }
 
 int Shape::getNumAngles()
 {
   return numAngles;
 }
Circle
circle.h
 #pragma once
 #include "Shape.h"
 
 class Circle : public Shape
 {
   double radius;
 public:
   Circle(double newRadius);  
   ~Circle();
 
   virtual double area() override;
 };
circle.cpp
 #include "Circle.h"
 #include <cmath>
 
 Circle::Circle(double newRadius) : Shape(0), radius(newRadius)
 {
 }
 
 Circle::~Circle()
 {
 }
 
 double Circle::area()
 {
   return 3.1415 * pow(radius, 2);
 }
Rectangle
rectangle.h
 #pragma once
 #include "Shape.h"
 
 class Rectangle : public Shape
 {
   double width;
   double height;
 public:
   Rectangle(double newWidth, double newHeight);
   ~Rectangle();
 
   virtual double area() override;
 };
rectangle.cpp
 #include "Rectangle.h"
 
 Rectangle::Rectangle(double newWidth, double newHeight)
   : Shape(4)
   , width(newWidth)
   , height(newHeight)
 {
 }
 
 Rectangle::~Rectangle()
 {
 }
 
 double Rectangle::area()
 {
   return width * height;
 }
main
main.cpp
 #include <memory>
 #include <vector>
 #include <iostream>
 #include "Circle.h"
 #include "Rectangle.h"
 
 int main()
 {
   std::vector<std::unique_ptr<Shape>> shapes;
   shapes.push_back(std::make_unique<Rectangle>(2, 3));
   shapes.push_back(std::make_unique<Circle>(2));
 
   double totalArea = 0;
   for (std::unique_ptr<Shape>& shape : shapes)
   {
     std::cout << shape->getNumAngles() << std::endl;
   }
 
   return 0;
 }