Contributed by Chris Rathman
class Shape {
public:
Shape(int newx, int newy);
int getX();
int getY();
void setX(int newx);
void setY(int newy);
void moveTo(int newx, int newy);
void rMoveTo(int deltax, int deltay);
virtual void draw();
private:
int x;
int y;
};
|
#include "Shape.h"
// constructor
Shape::Shape(int newx, int newy) {
moveTo(newx, newy);
}
// accessors for x & y
int Shape::getX() { return x; }
int Shape::getY() { return y; }
void Shape::setX(int newx) { x = newx; }
void Shape::setY(int newy) { y = newy; }
// move the shape position
void Shape::moveTo(int newx, int newy) {
setX(newx);
setY(newy);
}
void Shape::rMoveTo(int deltax, int deltay) {
moveTo(getX() + deltax, getY() + deltay);
}
// abstract draw method
void Shape::draw() {
}
|
class Rectangle: public Shape {
public:
Rectangle(int newx, int newy, int newwidth, int newheight);
int getWidth();
int getHeight();
void setWidth(int newwidth);
void setHeight(int newheight);
void draw();
private:
int width;
int height;
};
|
#include "Shape.h"
#include "Rectangle.h"
#include <iostream.h>
// constructor
Rectangle::Rectangle(int newx, int newy, int newwidth, int newheight): Shape(newx, newy) {
setWidth(newwidth);
setHeight(newheight);
}
// accessors for width and height
int Rectangle::getWidth() { return width; }
int Rectangle::getHeight() { return height; }
void Rectangle::setWidth(int newwidth) { width = newwidth; }
void Rectangle::setHeight(int newheight) { height = newheight; }
// draw the rectangle
void Rectangle::draw() {
cout << "Drawing a Rectangle at:(" << getX() << "," << getY() <<
"), width " << getWidth() << ", height " << getHeight() << endl;
}
|
class Circle: public Shape {
public:
Circle(int newx, int newy, int newradius);
int getRadius();
void setRadius(int newradius);
void draw();
private:
int radius;
};
|
#include "Shape.h"
#include "Circle.h"
#include <iostream.h>
// constructor
Circle::Circle(int newx, int newy, int newradius): Shape(newx, newy) {
setRadius(newradius);
}
// accessors for the radius
int Circle::getRadius() { return radius; }
void Circle::setRadius(int newradius) { radius = newradius; }
// draw the circle
void Circle::draw() {
cout << "Drawing a Circle at:(" << getX() << "," << getY() <<
"), radius " << getRadius() << endl;
}
|
#include <iostream.h>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"
int main(void) {
// set up array to the shapes
Shape *scribble[2];
scribble[0] = new Rectangle(10, 20, 5, 6);
scribble[1] = new Circle(15, 25, 8);
// iterate through the array and handle shapes polymorphically
for (int i = 0; i < 2; i++) {
scribble[i]->draw();
scribble[i]->rMoveTo(100, 100);
scribble[i]->draw();
}
// call a rectangle specific function
Rectangle *arec = new Rectangle(0, 0, 15, 15);
arec->setWidth(30);
arec->draw();
}
|
Drawing a Rectangle at:(10,20), width 5, height 6 Drawing a Rectangle at:(110,120), width 5, height 6 Drawing a Circle at:(15,25), radius 8 Drawing a Circle at:(115,125), radius 8 Drawing a Rectangle at:(0,0), width 30, height 15 |