The C++ operator and function overloading for complex number program example

Compiler: Visual C++ Express Edition 2005

Compiled on Platform: Windows XP Pro SP2

Header file: Standard

Additional library: none/default

Additional project setting: Set project to be compiled as C++

Project -> your_project_name Properties -> Configuration Properties -> C/C++ -> Advanced -> Compiled As: Compiled as C++ Code (/TP)

Other info: none

To do: The basic complex number operation to demonstrate the C++ operator and function overloading

To show: How to implement the operator and function overloading in C++ programming

// C++ operator and function overloading, the classic simple complex number example

#include <iostream>

using namespace std;

class complexnum

{

private:

double p, q;

public:

// constructor forming the a + bi

// overloaded function, with two arguments

complexnum(double a, double b)

{

p = a;

q = b;

}

// Constructor forming the a + 0i

// overloaded function, with single argument

complexnum(double a)

{

p = a;

q = 0;

}

// returns the real part

double realpart()

{return p; }

// returns the complex part

double imaginarypart()

{ return q; }

// addition operation of two complex numbers

// overloaded operator +

complexnum operator+(complexnum a)

{ return complexnum(a.p + p, a.q + q); }

// addition a complex number and a double

// overloaded operator +

complexnumoperator+(double a)

{ return complexnum(p + a, q);}

// subtraction operation of two complex numbers

// overloaded operator -

complexnum operator-(complexnum a)

{ return complexnum(p - a.p, q - a.q); }

// addition a complex number and a double

// overloaded operator -

complexnumoperator-(double a)

{ return complexnum(p - a, q); }

};

// display format for complex number

// overloaded operator <<

ostream& operator<<(ostream& s, complexnum r)

{

// if no imaginary part

if(r.imaginarypart() == 0)

// return real part only

return s<<r.realpart();

// if imaginary part < 0, i.e negative

else if(r.imaginarypart() < 0 )

{

// and if no real part

if(r.realpart() == 0)

// return imaginary part only

return s<<r.imaginarypart()<<"i";

else

// return both real and imaginary parts

return s<<r.realpart()<<r.imaginarypart()<<"i";

}

else

{

// and if no real part

if(r.realpart() == 0)

// return imaginary part only

return s<<r.imaginarypart()<<"i";

else

// return both, real and imaginary parts

return s<<r.realpart()<<" + "<<r.imaginarypart()<<"i";

}

}

void main(void)

{

double a,b;

// prompt for two numbers

cout<<"Enter 2 numbers: ";

// read and store the two numbers

cin>>a>>b;

complexnum r = complexnum(a,b);

cout<<"\nThe complex form is r = "<<r<<endl;

complexnum t = complexnum(7.0);

cout<<"\nGiven t = "<<t<<endl;

// addition of complex number and constant

cout<<"\nThen, r + t = "<<(r+t)<<endl;

// subtraction of complex number and complex number

cout<<"\nThen, r - (4 + 2i) = "<<(r - complexnum(4,2))<<endl;

// addition of complex number and complex number

cout<<"\nThen, r + (2 + 2i) = "<<(r + complexnum(2,2))<<endl;

}

Output example:

Enter 2 numbers: 2.2 4.5

The complex form is r = 2.2 + 4.5i

Given t = 7

Then, r + t = 9.2 + 4.5i

Then, r - (4 + 2i) = -1.8 + 2.5i

Then, r + (2 + 2i) = 4.2 + 6.5i

Press any key to continue . . .