|
ex7-8.cpp - Example 7-8 Multiple inheritance - Quadrilaterals |
// File: ex7-8.cpp
#include <iostream>
#include <cmath>
using namespace std;
class quadrilateral
{
protected:
double a,b,c,d;
public:
quadrilateral(double s1,double s2,double s3,double s4)
: a(s1), b(s2), c(s3), d(s4) {}
quadrilateral() {}
void show() { cout << "quadrilateral: " << this << " sides " <<
a << ' ' << b << ' ' << c << ' ' << d << endl; }
};
class trapezoid : public quadrilateral
{
public:
trapezoid(double base1, double base2, double leg1, double leg2)
: quadrilateral(base1,leg1,base2,leg2) {}
};
class isosceles_trapezoid : public trapezoid
{
public:
isosceles_trapezoid(double base1, double base2, double leg)
: trapezoid(base1,leg,base2,leg) {}
};
class parallelogram : public quadrilateral
{
protected:
int angle;
public:
parallelogram(double s1,double s2, int ang)
: quadrilateral(s1,s2,s1,s2) { angle = ang; }
parallelogram() { }
void show_angles(void)
{ cout << "angles = " << angle << ' ' << (180-angle) << endl; }
};
class rectangle : virtual public parallelogram
{
public:
rectangle(double base, double height)
: parallelogram(base,height,90) {}
rectangle() {}
};
class rhombus: virtual public parallelogram
{
public:
rhombus(double side,int ang) : parallelogram(side,side,ang) {}
rhombus() {}
};
class square : public rhombus,public rectangle
{
public:
square(double side) : parallelogram(side,side,90) {}
};
int main(void)
{
quadrilateral q1(1,2,3,4);
q1.show();
trapezoid q2(22,13,8,15);
q2.show();
isosceles_trapezoid q3(18,8,13);
q3.show();
parallelogram q4(4,3,45);
q4.show();
q4.show_angles();
rectangle q5(4,3);
q5.show();
q5.show_angles();
rhombus q6(5,45);
q6.show();
q6.show_angles();
cout << endl;
square q7(5);
q7.show();
q7.show_angles();
return 0;
}
CIS27: Programming in C++ Instructor: Joe Bentley