class ShapeWithArea
class Rectangle
class Triangle
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: }