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