#include <iostream> |
using namespace std; |
class Shape { |
public : |
Shape() { |
} |
virtual ~Shape() { |
} |
virtual double GetArea() = 0; |
virtual double GetPerim()= 0; |
virtual void Draw() = 0; |
private : |
}; |
void Shape::Draw() { |
cout << "Abstract drawing mechanism!\n" ; |
} |
class Circle: public Shape { |
public : |
Circle( int radius) : |
itsRadius(radius) { |
} |
virtual ~Circle() { |
} |
double GetArea() { |
return 3.14 * itsRadius * itsRadius; |
} |
double GetPerim() { |
return 2 * 3.14 * itsRadius; |
} |
void Draw(); |
private : |
int itsRadius; |
int itsCircumference; |
}; |
void Circle::Draw() { |
cout << "Circle drawing routine here!\n" ; |
Shape::Draw(); |
} |
class Rectangle: public Shape { |
public : |
Rectangle( int len, int width) : |
itsLength(len), itsWidth(width) { |
} |
virtual ~Rectangle() { |
} |
double GetArea() { |
return itsLength * itsWidth; |
} |
double GetPerim() { |
return 2 * itsLength + 2 * itsWidth; |
} |
virtual int GetLength() { |
return itsLength; |
} |
virtual int GetWidth() { |
return itsWidth; |
} |
void Draw(); |
private : |
int itsWidth; |
int itsLength; |
}; |
void Rectangle::Draw() { |
for ( int i = 0; i < itsLength; i++) { |
for ( int j = 0; j < itsWidth; j++) |
cout << "x " ; |
cout << "\n" ; |
} |
Shape::Draw(); |
} |
class Square: public Rectangle { |
public : |
Square( int len); |
Square( int len, int width); |
virtual ~Square() { |
} |
double GetPerim() { |
return 4 * GetLength(); |
} |
}; |
Square::Square( int len) : |
Rectangle(len, len) { |
} |
Square::Square( int len, int width) : |
Rectangle(len, width) |
{ |
if (GetLength() != GetWidth()) |
cout << "Error, not a square... a Rectangle??\n" ; |
} |
int main() { |
int choice; |
bool fQuit = false ; |
Shape * sp; |
while (fQuit == false ) { |
cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: " ; |
cin >> choice; |
switch (choice) { |
case 1: |
sp = new Circle(5); |
break ; |
case 2: |
sp = new Rectangle(4, 6); |
break ; |
case 3: |
sp = new Square(5); |
break ; |
default : |
fQuit = true ; |
break ; |
} |
if (fQuit == false ) { |
sp->Draw(); |
delete sp; |
cout << endl; |
} |
} |
return 0; |
} |