Monday, November 2, 2009

Polymorphism / Class Heirarchy examples ~ Shapes

/*
Title: Lab 10 - Polymorphism ~ Shape Classes Declarations
Author: Daniel J. Tanner
Date: March 12th, 2006
Class: CS 1410
*/

#ifndef TANNSHAPE_H
#define TANNSHAPE_H

#include
#include
#include
using namespace std;

namespace Metzengerstein
{
//named constants
const double PI = 3.141592654;

//Shape Class declaration
class TannShape
{
public:
virtual double getArea()const = 0;
virtual double getPerimeter()const = 0;
virtual void print()const = 0;
};

//Triangle Class Declaration
class Triangle : public TannShape
{
public:
Triangle();
Triangle(double sideA, double sideB, double sideC);
void setSides(double sideA, double sideB, double sideC);
void setSides(double * sides);
virtual double getArea()const;
virtual double getPerimeter()const{return sides_[0] + sides_[1] + sides_[2];}
virtual void print()const;
private:
double sides_[3];
};

//Rectangle Class Declaration
class Rectangle : public TannShape
{
public:
Rectangle(){width_ = 0; length_ = 0;}
Rectangle(double length, double width){width_ = width; length_ = length;}
void setLength(double length){length_ = length;}
void setWidth(double width){width_ = width;}
double getWidth()const{return width_;}
double getLength()const{return length_;}
virtual double getArea()const{return length_ * width_;}
virtual double getPerimeter()const{return 2 * width_ + 2 * length_;}
virtual void print()const;
private:
double length_;
double width_;
};

//Circle Class Declaration
class Circle : public TannShape
{
public:
Circle(){radius_ = 0;}
Circle(double radius){radius_ = radius;}
void setRadius(double radius){radius_ = radius;}
double getRadius()const{return radius_;}
virtual double getArea()const{return PI * pow(radius_, 2);}
virtual double getPerimeter()const {return PI * 2 * radius_;}
virtual void print()const;
private:
double radius_;
};

//Square Class Declaration
class Square : public Rectangle
{
public:
Square() : Rectangle(0,0){}
Square(double side) : Rectangle(side, side){}
void setSide(double side){setLength(side); setWidth(side);}
virtual void print()const;
double getSide()const{return getLength();}
};
}
#endif

No comments:

Post a Comment