/* 
** Name:     complex.h
** Author:   Leo Liberti
** Purpose:  header file for a complex numbers class
** Source:   GNU C++
** History:  061019 work started
*/
#ifndef _COMPLEXH
#define _COMPLEXH
#include<string>
#include<iostream>
class Complex {
 public:
  Complex();
  Complex(double re, double im);
  ~Complex();
  double getReal(void);
  double getImaginary(void);
  void setReal(double re);
  void setImaginary(double im);
  void fromString(const std::string& complexString);
  Complex operator+(Complex& theComplex);
  Complex operator-(Complex& theComplex);
  Complex operator*(Complex& theComplex);
  Complex operator/(Complex& theComplex);
 private:
  double real;
  double imag;
};
std::ostream& operator<<(std::ostream& out, Complex& theComplex);
#endif
Write the corresponding implementation file complex.cxx. Test it on the
following main() function definition, using the command
 . The output should be
. The output should be 
 .
.
/* 
** Name:     test.cxx
** Author:   Leo Liberti
** Purpose:  testing the complex numbers class
** Source:   GNU C++
** History:  061019 work started
*/
#include <iostream>
#include <string>
#include "complex.h"
int main(int argc, char** argv) {
  using namespace std;
  if (argc < 4) {
    cerr << "need an operation on command line" << endl;
    cerr << "   e.g. ./test 4.3+3i - 2+3.1i" << endl;
    cerr << "   (no spaces within each complex number, use spaces to\n";
    cerr << "    separate the operands and the operator - use arithmetic\n";
    cerr << "    operators only)" << endl;
    return 1;
  }
  string complexString1 = argv[1];
  string complexString2 = argv[3];
  Complex complex1;
  complex1.fromString(complexString1);
  Complex complex2;
  complex2.fromString(complexString2);
  Complex complex3;
  if (argv[2][0] == '+') {
    complex3 = complex1 + complex2;
  } else if (argv[2][0] == '-') {
    complex3 = complex1 - complex2;
  } else if (argv[2][0] == '*' || argv[2][0] == '.') {
    argv[2][0] = '*';
    complex3 = complex1 * complex2;
  } else if (argv[2][0] == '/') {
    complex3 = complex1 / complex2;
  }
  cout << complex1 << " " << argv[2][0] << " (" << complex2 << ") = "
       << complex3 << endl;
  return 0;
}
Use the following Makefile to compile (use tabs, not spaces
after each label -- for that you need to use the Emacs editor):
# Name:     complex.Makefile
# Author:   Leo Liberti
# Purpose:  makefile for complex class project
# Source:   GNU C++
# History:  061019 work started
CXXFLAGS = -g
all: test
test: complex.o test.cxx
        c++ $(CXXFLAGS) -o test test.cxx complex.o
complex.o: complex.cxx complex.h
        c++ $(CXXFLAGS) -c -o complex.o complex.cxx
clean:
        rm -f *~ complex.o test