/************************************************************************* * complex.h * * Header file for an implementation of complex numbers using operator * overloading. Features overloading of basic arithmetic and comparison. * * Written by Paul Bonamy - 8 June 2010 ************************************************************************/ #ifndef COMPLEX_H #define COMPLEX_H #include // provides the ostream def for the output op using namespace std; /************************************************************************* * Relatively simple complex number class * Provides basic arithmetic and comparison overloading ************************************************************************/ class Complex { public: // constructors Complex(); // default Complex(double r, double i); // rpart and ipart given Complex(double r); // only rpart given // no dynamic memory == no need for a destructor // the output operator always has to be global, so friend it friend ostream& operator<< ( ostream & out, const Complex & c); // operators overloaded as member functions Complex& operator= (const Complex & c); // assignment // basic (non-modifying) arithmetic const Complex operator+ (const Complex & c) const; // addition const Complex operator- (const Complex & c) const; // subtraction const Complex operator* (const Complex & c) const; // multiplication const Complex operator/ (const Complex & c) const; // division // self-modifying arithmetic Complex& operator+= (const Complex & c); // addition Complex& operator-= (const Complex & c); // subtraction Complex& operator*= (const Complex & c); // multiplication Complex& operator/= (const Complex & c); // division // comparison operators bool operator== (const Complex & c) const; // equality bool operator!= (const Complex & c) const; // inequality bool operator> (const Complex &c) const; // greater-than bool operator< (const Complex &c) const; // less-than bool operator>= (const Complex &c) const; // greater-than-or-equal bool operator<= (const Complex &c) const; // less-than-or-equal // these are here to make the class more useful for other things double abs(); // absolute value aka modulus, magniture Complex conj(); // complex conjugate // getter methods for the parts of the Complex double re() { return rpart; } double im() { return ipart; } private: double rpart; // real part double ipart; // imaginary part }; #endif