Please explain how inheritance works in this program and how the inclusion of th
ID: 3911106 • Letter: P
Question
Please explain how inheritance works in this program and how the inclusion of the Shape base class affects the structure of the other classes.
Circle.cpp
#include "circle.h"
#include <iostream>
#include <string>
using namespace std;
void Circle::input()
{
ID = 1;
type = "Circle";
cout << "Enter radius: ";
cin >> radius;
cout << "Enter Unit Of Measure: ";
cin >> unitOfMeasure;
}
void Circle::print()
{
// circumference of circle
double circumference = 2 * 3.14159 * radius;
cout << type << " with ID = " << ID
<< ", radius = " << radius << " " << unitOfMeasure
<< ", area = " << GetArea() << " " << unitOfMeasure << "^2"
<< ", circumference = " << " " << circumference << unitOfMeasure << endl;
}
double Circle::GetArea()
{
// area of circle
return 3.14159 * radius * radius;
}
Main.cpp
#include <iostream>
#include "square.h"
#include "circle.h"
#include "triangle.h"
using namespace std;
int main()
{
char type;
// Loop till user want to quit
Shape* sh = nullptr;
while (true)
{
// Prompt user for option
cout << "Enter type of figure(C - Circle, S - Square, T - Triangle or Q - quit: ";
cin >> type;
switch(type)
{
case 'C': sh = new Circle; break;
case 'S': sh = new Square; break;
case 'T': sh = new Triangle; break;
case 'Q': exit(0);
default:
cout << "Invalid ";
break;
}
if(sh)
{
sh->input();
sh->print();
delete sh;
sh = nullptr;
}
cout << endl;
}
return 0;
}
Square.cpp
// include square.h header file
#include "square.h"
// Constructor
Square::Square(double _a)
: a(_a)
{
}
// function to calculate area
double Square::GetArea()
{
return a * a;
}
// function to read sides
void Square::input()
{
ID = 2;
type = "Square";
cout << "Enter side: ";
cin >> a;
cout << "Enter Unit Of Measure: ";
cin >> unitOfMeasure;
}
// print sides and area
void Square::print()
{
cout << type << endl;
cout << "ID: " << ID << endl;
cout << "Side: " << a << " " << unitOfMeasure << endl;
cout << "Area: " << GetArea() << " " << unitOfMeasure << "^2" << endl;
}
Triangle.cpp
#include "triangle.h"
#include <cmath>
double Triangle::GetArea()
{
double s = (a + b + c)/2;
return sqrt((s*(s-a)*(s-b)*(s-c)));
}
void Triangle::input()
{
ID = 3;
type = "Triangle";
cout << "Enter side a: ";
cin >> a;
cout << "Enter side b: ";
cin >> b;
cout << "Enter side c: ";
cin >> c;
cout << "Enter Unit Of Measure: ";
cin >> unitOfMeasure;
}
void Triangle::print()
{
cout << type << endl;
cout << "ID: " << ID << endl;
cout << "Side a: " << a << " " << unitOfMeasure << ", Side b: "
<< b << " " << unitOfMeasure
<< ", Side c: " << c << " " << unitOfMeasure << endl;
cout << "Area: " << GetArea() << " " << unitOfMeasure << "^2" << endl;
}
Circle.h
#ifndef CIRCLE_H_INCLUDED
#define CIRCLE_H_INCLUDED
#include <iostream>
#include "shape.h"
using namespace std;
class Circle : public Shape
{
private:
double radius;
double GetArea() override;
public:
Circle() = default;
void input() override;
void print() override;
};
#endif // CIRCLE_H_INCLUDED
Shape.h
#ifndef SHAPE_H_INCLUDED
#define SHAPE_H_INCLUDED
#include <iostream>
using namespace std;
class Shape
{
protected:
int ID;
string type;
string unitOfMeasure;
Shape() = default;
virtual double GetArea() = 0;
public:
virtual void input() = 0;
virtual void print() = 0;
virtual ~Shape(){}
};
#endif // SHAPE_H_INCLUDED
Square.h
#ifndef SQUARE_H_INCLUDED
#define SQUARE_H_INCLUDED
#include <iostream>
#include <string>
#include "shape.h"
using namespace std;
class Square : public Shape
{
private:
double a;
//declaration of functions in header file
double GetArea() override;
public:
// constructor with default arguments 0.0
Square(double _a = 0.0);
void print() override;
void input() override;
};
#endif // SQUARE_H_INCLUDED
Triangle.h
#ifndef TRIANGLE_H
#define TRIANGLE_H
#include "shape.h"
class Triangle : public Shape
{
private:
double a, b, c;
double GetArea() override;
public:
Triangle() = default;
void input() override;
void print() override;
};
#endif // TRIANGLE_H
Explanation / Answer
Shape is called as Parent Class and Circle, Square, Triangle are Child Classes...
Inheritance means child classes can be extend from the parent class means all of the properties and members of parent class included in child class.
If you still have any doubts, please give me comment...