Source of inherit6.cpp


  1: /** @file inherit6.cpp */

  3: #include <iostream>
  4: #include "utilities.h"

  6: using namespace std;
  7: using namespace Scobey;

  9: class ShapeWithArea
 10: {
 11: public:
 12:     void setDimensions
 13:     (
 14:         double dim1, //in
 15:         double dim2  //in
 16:     )
 17:     {
 18:         dimension1 = dim1;
 19:         dimension2 = dim2;
 20:     }

 22:     void getDimensions(double &dim1, double &dim2)
 23:     {
 24:         dim1 = dimension1;
 25:         dim2 = dimension2;
 26:     }

 28:     virtual double getArea() = 0; //A pure virtual function

 30: private:
 31:     //Dimensions of figure
 32:     double dimension1;
 33:     double dimension2;
 34: };


 37: class Rectangle : public ShapeWithArea
 38: {
 39: public:
 40:     virtual double getArea() 
 41:     {
 42:         double dim1, dim2;
 43:         getDimensions(dim1, dim2);
 44:         return dim1 * dim2;
 45:     }
 46: };


 49: class Triangle : public ShapeWithArea
 50: {
 51: public:
 52:     virtual double getArea()
 53:     {
 54:         double dim1, dim2;
 55:         getDimensions(dim1, dim2);
 56:         return 0.5 * dim1 * dim2;
 57:     }
 58: };


 61: int main()
 62: {
 63:     cout << "\nThis program illustrates the use of a \"pure virtual "
 64:         "function\"\nto create an \"abstract base class\".";
 65:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 67:     //This declaration is now a compile-time error:
 68:     //ShapeWithArea a;

 70:     //But this one is OK:
 71:     ShapeWithArea *p;

 73:     cout << "\nFirst we create a 3 by 4 rectangle.";
 74:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 75:     Rectangle r;
 76:     r.setDimensions(3.0, 4.0);
 77:     p = &r;
 78:     cout << "\nRectangle has area: " << p->getArea();
 79:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 81:     cout << "\nNext we create a triangle with base 4 and height 5.";
 82:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 83:     Triangle t;
 84:     t.setDimensions(4.0, 5.0);
 85:     p = &t;
 86:     cout << "\nTriangle has area: " << p->getArea();
 87:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 88: }