Kenneth Bruen
3 years ago
5 changed files with 284 additions and 0 deletions
@ -0,0 +1,95 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <math.h> |
||||||
|
|
||||||
|
#ifndef M_PI |
||||||
|
#define M_PI (3.14159265358979323846) |
||||||
|
#endif |
||||||
|
|
||||||
|
using namespace std; |
||||||
|
|
||||||
|
enum BOOL { FALSE, TRUE }; |
||||||
|
|
||||||
|
class GeneralShape |
||||||
|
{ |
||||||
|
public: |
||||||
|
GeneralShape(){}; |
||||||
|
~GeneralShape(){}; |
||||||
|
virtual long GetArea() = 0; |
||||||
|
virtual long GetPerim()= 0; |
||||||
|
virtual void Draw() = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
void GeneralShape::Draw() |
||||||
|
{ |
||||||
|
cout << "drawing mechanism!" << endl; |
||||||
|
} |
||||||
|
|
||||||
|
class Circle : public GeneralShape |
||||||
|
{ |
||||||
|
public: |
||||||
|
Circle(int radius):itsRadius(radius){} |
||||||
|
~Circle(){} |
||||||
|
|
||||||
|
private: |
||||||
|
int itsRadius; |
||||||
|
int itsCircumference; |
||||||
|
}; |
||||||
|
|
||||||
|
class Rectangle : public GeneralShape |
||||||
|
{ |
||||||
|
public: |
||||||
|
Rectangle(int len, int width): |
||||||
|
itsLength(len), itsWidth(width){} |
||||||
|
~Rectangle(){} |
||||||
|
virtual int GetLength() { return itsLength; } |
||||||
|
virtual int GetWidth() { return itsWidth; } |
||||||
|
|
||||||
|
private: |
||||||
|
int itsWidth; |
||||||
|
int itsLength; |
||||||
|
}; |
||||||
|
|
||||||
|
class Square : public Rectangle |
||||||
|
{ |
||||||
|
public: |
||||||
|
Square(int len); |
||||||
|
Square(int len, int width); |
||||||
|
~Square(){} |
||||||
|
long 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 quit = FALSE; |
||||||
|
GeneralShape *sp; |
||||||
|
|
||||||
|
while (1) |
||||||
|
{ |
||||||
|
cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: "; |
||||||
|
cin >> choice; |
||||||
|
|
||||||
|
switch (choice) |
||||||
|
{ |
||||||
|
default: quit = TRUE; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (quit) break; |
||||||
|
|
||||||
|
cout << endl; |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,173 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <math.h> |
||||||
|
|
||||||
|
#ifndef M_PI |
||||||
|
#define M_PI (3.14159265358979323846) |
||||||
|
#endif |
||||||
|
|
||||||
|
using namespace std; |
||||||
|
|
||||||
|
enum BOOL { FALSE, TRUE }; |
||||||
|
|
||||||
|
class GeneralShape { |
||||||
|
public: |
||||||
|
GeneralShape(){}; |
||||||
|
~GeneralShape(){}; |
||||||
|
virtual long GetArea() = 0; |
||||||
|
virtual long GetPerim()= 0; |
||||||
|
virtual void Draw() = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
void GeneralShape::Draw() { |
||||||
|
cout << "drawing mechanism!" << endl; |
||||||
|
} |
||||||
|
|
||||||
|
class Circle : public GeneralShape { |
||||||
|
public: |
||||||
|
Circle(int radius):itsRadius(radius), itsCircumference(2*M_PI*radius){} |
||||||
|
~Circle(){} |
||||||
|
virtual long GetArea(); |
||||||
|
virtual long GetPerim(); |
||||||
|
virtual void Draw(); |
||||||
|
|
||||||
|
private: |
||||||
|
int itsRadius; |
||||||
|
int itsCircumference; |
||||||
|
}; |
||||||
|
|
||||||
|
long Circle::GetArea() { |
||||||
|
return M_PI * itsRadius * itsRadius; |
||||||
|
} |
||||||
|
|
||||||
|
long Circle::GetPerim() { |
||||||
|
return itsCircumference; |
||||||
|
} |
||||||
|
|
||||||
|
void Circle::Draw() { |
||||||
|
cout << "Drawing circle with r=" << itsRadius << ", area=" << GetArea() << ", perim=" << GetPerim() << endl; |
||||||
|
} |
||||||
|
|
||||||
|
class Rectangle : public GeneralShape { |
||||||
|
public: |
||||||
|
Rectangle(int len, int width): |
||||||
|
itsLength(len), itsWidth(width){} |
||||||
|
~Rectangle(){} |
||||||
|
virtual int GetLength() { return itsLength; } |
||||||
|
virtual int GetWidth() { return itsWidth; } |
||||||
|
virtual long GetArea(); |
||||||
|
virtual long GetPerim(); |
||||||
|
virtual void Draw(); |
||||||
|
|
||||||
|
private: |
||||||
|
int itsWidth; |
||||||
|
int itsLength; |
||||||
|
}; |
||||||
|
|
||||||
|
long Rectangle::GetArea() { |
||||||
|
return itsLength * itsWidth; |
||||||
|
} |
||||||
|
|
||||||
|
long Rectangle::GetPerim() { |
||||||
|
return (itsLength + itsWidth) * 2; |
||||||
|
} |
||||||
|
|
||||||
|
void Rectangle::Draw() { |
||||||
|
cout << "Drawing rectangle with W=" << itsWidth << ", H=" << itsLength << ", area=" << GetArea() << ", perim=" << GetPerim() << endl; |
||||||
|
} |
||||||
|
|
||||||
|
class Square : public Rectangle { |
||||||
|
public: |
||||||
|
Square(int len); |
||||||
|
Square(int len, int width); |
||||||
|
~Square(){} |
||||||
|
long GetPerim() {return 4 * GetLength();} |
||||||
|
virtual void Draw(); |
||||||
|
}; |
||||||
|
|
||||||
|
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"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Square::Draw() { |
||||||
|
cout << "Drawing square with L=" << GetLength() << ", area=" << GetArea() << ", perim=" << GetPerim() << endl; |
||||||
|
} |
||||||
|
|
||||||
|
void shapeMenu(GeneralShape& shape) { |
||||||
|
bool stop {false}; |
||||||
|
int choice {}; |
||||||
|
while (1) { |
||||||
|
cout << "(1)Draw (2)Get Perimeter (3)Get Area (0)Back: "; |
||||||
|
cin >> choice; |
||||||
|
switch (choice) { |
||||||
|
case 1: |
||||||
|
shape.Draw(); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
cout << shape.GetPerim() << endl; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
cout << shape.GetArea() << endl; |
||||||
|
break; |
||||||
|
default: |
||||||
|
stop = true; |
||||||
|
} |
||||||
|
if (stop) break; |
||||||
|
cout << endl; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void circleMenu() { |
||||||
|
int radius; |
||||||
|
cout << "Radius? "; |
||||||
|
cin >> radius; |
||||||
|
Circle c {radius}; |
||||||
|
shapeMenu(c); |
||||||
|
} |
||||||
|
|
||||||
|
void rectMenu() { |
||||||
|
int width, height; |
||||||
|
cout << "Width? "; |
||||||
|
cin >> width; |
||||||
|
cout << "Height? "; |
||||||
|
cin >> height; |
||||||
|
Rectangle r {height, width}; |
||||||
|
shapeMenu(r); |
||||||
|
} |
||||||
|
|
||||||
|
void squareMenu() { |
||||||
|
int length; |
||||||
|
cout << "Side Length? "; |
||||||
|
cin >> length; |
||||||
|
Square s {length}; |
||||||
|
shapeMenu(s); |
||||||
|
} |
||||||
|
|
||||||
|
int main() { |
||||||
|
int choice; |
||||||
|
BOOL quit = FALSE; |
||||||
|
GeneralShape *sp; |
||||||
|
while (1) { |
||||||
|
cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: "; |
||||||
|
cin >> choice; |
||||||
|
switch (choice) { |
||||||
|
case 1: |
||||||
|
circleMenu(); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
rectMenu(); |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
squareMenu(); |
||||||
|
break; |
||||||
|
default: quit = TRUE; |
||||||
|
break; |
||||||
|
} |
||||||
|
if (quit) break; |
||||||
|
cout << endl; |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
Loading…
Reference in new issue