Homework of Chapter Polymorphism and Virtual Function
Homework:
Define a virtual base class Shape, then derive five class: Circle, Square, Rectangle, Trapezoid and Triangle. Using virtual funciton to work out and display the area of every graph. And get the sum of these graphs.
Tomorrow, oh no, it has, I will learn the last but one Chapter:I/0 stream. Also, hope it is not too difficult.
Define a virtual base class Shape, then derive five class: Circle, Square, Rectangle, Trapezoid and Triangle. Using virtual funciton to work out and display the area of every graph. And get the sum of these graphs.
Tomorrow, oh no, it has, I will learn the last but one Chapter:I/0 stream. Also, hope it is not too difficult.
#include <iostream>
#include <cmath>
using namespace std;
const float Pi=3.14;
class Shape
{
public:
Shape(){}
virtual float getAreaValue() const
{
return 0.0;
}
virtual void printArea() const = 0;
};
class Circle : public Shape
{
public:
Circle()
{
radius=0.0;
}
Circle(float r)
{
radius=r;
}
virtual void printArea() const;
virtual float getAreaValue() const;
private:
float radius;
};
void Circle::printArea() const
{
cout << "Circle Area:";
cout << Pi*radius*radius << endl;
}
float Circle::getAreaValue() const
{
return Pi*radius*radius;
}
class Square : public Shape
{
public:
Square()
{
side=0.0;
}
Square(float s)
{
side=s;
}
virtual void printArea() const;
virtual float getAreaValue() const;
private:
float side;
};
void Square::printArea() const
{
cout << "Square Area:";
cout << side*side << endl;
}
float Square::getAreaValue() const
{
return side*side;
}
class Rectangle : public Shape
{
public:
Rectangle()
{
length=0.0;
width=0.0;
}
Rectangle(float l,float w)
{
length=l;
width=w;
}
virtual void printArea() const;
virtual float getAreaValue() const;
private:
float length;
float width;
};
void Rectangle::printArea() const
{
cout << "Rectangle Area:";
cout << length*width << endl;
}
float Rectangle::getAreaValue() const
{
return length*width;
}
class Trapezoid : public Shape
{
public:
Trapezoid()
{
topSide=0.0;
bottomSide=0.0;
height=0.0;
}
Trapezoid(float t,float b,float h)
{
topSide=t;
bottomSide=b;
height=h;
}
virtual void printArea() const;
virtual float getAreaValue() const;
private:
float topSide;
float bottomSide;
float height;
};
void Trapezoid::printArea() const
{
cout << "Trapezoid Area:";
cout << ((topSide+bottomSide)*height)/2.0 << endl;
}
float Trapezoid::getAreaValue() const
{
return ((topSide+bottomSide)*height)/2.0;
}
class Triangle : public Shape
{
public:
Triangle()
{
sideA=0.0;
sideB=0.0;
sideC=0.0;
}
Triangle(float a,float b,float c)
{
sideA=a;
sideB=b;
sideC=c;
}
virtual void printArea() const;
virtual float getAreaValue() const;
private:
float sideA;
float sideB;
float sideC;
};
void Triangle::printArea() const
{
if(((sideA+sideB)>sideC)&&((sideA+sideC)>sideB)&&((sideC+sideB)>sideA))
{
float temp=(sideA+sideB+sideC)/2.0;
float s=0.0;
s=sqrt(temp*(temp-sideA)*(temp-sideB)*(temp-sideC));
cout << "Triangle Area:";
cout << s << endl;
}
else
cout << "These 3 sides cannot creat a triangle." << endl;
}
float Triangle::getAreaValue() const
{
if(((sideA+sideB)>sideC)&&((sideA+sideC)>sideB)&&((sideC+sideB)>sideA))
{
float temp=(sideA+sideB+sideC)/2.0;
float s=0.0;
s=sqrt(temp*(temp-sideA)*(temp-sideB)*(temp-sideC));
return s;
}
else
return 0.0;
}
int main(void)
{
Shape *p[5]={NULL};
Circle circle(2.0);
p[0]=&circle;
Square square(3.0);
p[1]=□
Rectangle rectangle(3.0,4.0);
p[2]=&rectangle;
Trapezoid trapezoid(3.0,4.0,2.0);
p[3]=&trapezoid;
Triangle triangle(3.0,4.0,5.0);
p[4]=▵
for(int i=0;i<5;i++)
p[i]->printArea();
float areaSum=0.0;
for(int i=0;i<5;i++)
areaSum+=p[i]->getAreaValue();
cout << "\nSum of these graphs:" << areaSum << endl;
return 0;
}
评论