Basics of C/C++ Programming Practice 7 Code
From ICO 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; }