/****************************************************************
distance.h
Header file for declaration of Distance class.
Must be included by any file using Distance objects.
"&" on parameter types means passing by reference
--more efficient since avoids passing copies of variables
--make "const" if not changing the var referenced
Make methods "const" if does not alter object data.
****************************************************************/
#include <iostream>
using namespace std;
class Distance {
private:
int feet;
float inches;
static int inUnits;
public:
enum units {Feet, Inches};
// Constructors
Distance(const int& ft = 0, const float& in = 0.0);
Distance(const float& in);
// Access to private data--set and get methods
void setDist(const int& ft = 0, const float& in = 0.0);
void setUnits(const int& units = Inches);
units getUnits();
const float getDist() const;
const float getInches() const;
const int getFeet() const;
// Other methods
void prompt();
void display(ostream& out = cout) const;
friend ostream& operator<<(ostream&, const Distance&);
// Operator overloads
// Almost always return a Distance obj so can
// do things like d3 = d2 = d1++ = d4 + d5;
Distance operator+(const Distance& d) const;
Distance operator-(const Distance& d) const;
Distance operator*(const float& f) const;
Distance operator*(const int& i) const;
Distance operator/(const float& f) const;
Distance operator/(const int& i) const;
//increment by inches
Distance& operator++(); // Prefix
Distance operator++(int); // Postfix
Distance& operator+=(const Distance& d);
//boolean comparison operators
bool operator==(const Distance& d) const;
bool operator!=(const Distance& d) const;
bool operator>(const Distance& d) const;
bool operator<=(const Distance& d) const;
bool operator<(const Distance& d) const;
bool operator>=(const Distance& d) const;
// Hey, we can make our own cast!!!
operator float();
};