Since this is not a templatized class, we will use traditional techniques to build a library, libmycomplex.a, which we will link into our applications. The appropriate makefiles and so forth are very standard and will not be listed here. A typical test code is as follows:
#include "mycomplex.h"
int main()
{
MYCOMPLEX z(2,3),w(4,-5),u(5.0,-4.6),v(1002.45,567.98);
cout << " z = " << z << endl;
cout << " w = " << w << endl;
cout << " u = " << u << endl;
cout << " v = " << v << endl;
MYCOMPLEX a;
cout << "Default a = " << a << endl;
cout << "Test Overloaded = " << endl;
a = z;
MYCOMPLEX b;
b = z*w;
cout << "b = z*w " << b << endl;
b = u+v;
cout << "b = u+v " << b << endl;
b = u-v;
cout << "b = u-v " << b << endl;
b *= a;
cout << "b *= a " << b << endl;
b += z;
cout << "b += z " << b << endl;
b -= z;
cout << "b -= z " << b << endl;
b = w / z;
cout << "b = w/z " << b << endl;
b /= z;
cout << "b /= z " << b << endl;
MYCOMPLEX *omega;
omega = unity(6);
cout << "Test Roots of Unity " << endl;
for(int i = 0;i<6;++i){
cout << "omega[" << i << "] = " << omega[i] << endl;
}
cout << "Modulus of z " << modulus(z) << endl;
double ARG = arg(z);
double norm = modulus(z);
cout << "Arg of z =" << ARG << endl;
cout << " original z =" << z << endl;
MYCOMPLEX c(norm*cos(ARG),norm*sin(ARG));
cout << "modulus(z)*e^Iarg = " << c << endl;
cout << "Testing operators: " << endl;
MYCOMPLEX Q(2.0,4.0);
int ix = 2;
float x = 3.0;
double y = 4.0;
cout << "Q = " << Q << endl;
cout << "2*Q = " << ix*Q << endl;
cout << "Q*2 = " << Q*ix << endl;
cout << "3.0*Q = " << x*Q << endl;
cout << "Q*3.0 = " << Q*x << endl;
cout << "4.0*Q = " << y*Q << endl;
cout << "Q*4.0 = " << Q*y << endl;
cout << "Q > 0 " << (Q>0) << endl;
cout << "Q!=0 " << (Q!=0) << endl;
return(1);
}
with corresponding output:
albert% mycomplex z = 2 +3I w = 4-5I u = 5-4.6I v = 1002.45 +567.98I a = 2+3I Test Overloaded = b = z*w 23 +2I b = u+v 1007.45 +563.38I b = u-v -997.45-572.58I b *= a -277.16-1976.64I b += z -275.16-1973.64I b -= z -277.16-1976.64I b = w/z -0.538462-1.69231I b /= z -0.473373-0.151115I Test Roots of Unity omega[0] = 1+0I omega[1] = 0.5 +0.866025I omega[2] = -0.5 +0.866025I omega[3] = -1+0I omega[4] = -0.5-0.866025I omega[5] = 0.5-0.866025I Modulus of z 3.60555 Arg of z =0.982794 original z =2 +3I modulus(z)*e^Iarg = 2 +3I Testing operators: Q = 2 +4I 2*Q = 4 +8I Q*2 = 4 +8I 3.0*Q = 6 +12I Q*3.0 = 6 +12I 4.0*Q = 8 +16I Q*4.0 = 8 +16I Q > 0 1 == This is a Yes! Q!=0 1 == This is a Yes!