// ----------------------------------------------------------------------
// Location Class definition (Location.h)
//
// 10/3/95 Paul McNamee
// ----------------------------------------------------------------------

#include <iostream.h>

// ----------------------------------------------------------------------
class Location {
    
  private:
    // data members
    float _latitude;
    float _longitude;
    
  public:
    // Default (no-argument constructor)
    Location() {
      _latitude = _longitude = 0.0;
    };
    
    // Two-argument constructor
    Location(float lat, float lon) {
      _latitude = lat;
      _longitude = lon;
    };

    // Copy Constructor
    Location (const Location &c) {
      _latitude = c._latitude;
      _longitude = c._longitude;
    };

    // Operator = (assignment)
    Location & operator= (const Location &c) {
      _latitude = c._latitude;
      _longitude = c._longitude;
      return *this;
    };

    ~Location() {
      cout << *this << endl;    // No special destruction, but print out first
    };

    // Encapsulation methods:
    void SetLatitude(float lat) {
      _latitude = lat;
      return;
    };
    
    float GetLatitude() const {
      return (_latitude);
    };
    
    void SetLongitude(float lon) {
      _longitude = lon;
      return;
    };
    
    float GetLongitude() const {
      return (_longitude);
    };

    // Friend declarations
    friend ostream& operator<< (ostream&, const Location&);

};

// Normal prototype in a dot-h file.
float GreatCircleDistance(const Location &l1, const Location &l2);

#define DEG2RAD 0.01745F
