The Complex Class
This chapter describes:- How to use complex numbers with the class complex
- Functions in the library:
- Constructor function
- Operator functions
- Complex functions
- Trigonometric and hyperbolic functions
- Mathematical functions
This class implements complex numbers. Using overloaded functions and operators, you can treat complex numbers like you treat reals or integers. You can use the following:
- Arithmetic operators (+, -, /, *), relational operators (==,
!=), and logical operators (&&, ||)
- Stream operators << and >>.
- Mathematical functions, such as sqrt() and log10().
Using the Complex Class
To use complex numbers, add the library complex to your project and include file oldcomplex.h in your file, in a statement like this:#include <oldcomplex.h>You can declare a complex variable three ways: uninitialized, initialized with two numbers, or initialized with another complex number. For example:
complex z1; // Uninitialized complex z2(1.0,2.0); // Initialized with two numbers complex z3 = z2; // Initialized with a complex numberTo access components of a complex number, use member functions complex::real() and complex::imag(). For example:
complex z1, z2(5.0,6.0); z1.real() = z2.imag(); z1.imag() = z2.real();To print or read a complex number, use stream operators operator>> and operator<<. For example, this program:
#include <complex.h> #include <iostream.h> int main() { complex z1(1.1, 2.0), z2; cout << "Enter z2: "; cin >> z2; cout << "z1 = " << z1 << '\n'; cout << "z2 = " << z2 << '\n'; return 0; }prints this:
Enter z2: 10 9.8 z1 = (1.1, 2) z2 = (10,9.8)You can also use a complex number in the middle of a statement. For example, this line prints out the sine of (1, 1):
cout << sin(complex(1,1));Note: To invoke the complex version of a function, one of its arguments must be complex. For example, to figure the square root of -1, you must use sqrt(complex(-1,0)).
Member Functions
The five types of class member functions are:- Constructors
- Operators
- Complex
- Trigonometric and hyperbolic
- Mathematical
Constructor Function
The following function is a constructor function.complex::complex()
- Header
- oldcomplex.h
- Prototype
- complex::complex();
complex::complex(double re, double im);
complex::complex(const complex& z); - Description
- The first constructor creates an unitialized complex number. For
example:
complex z;
The second constructor creates a complex number with the real part initialized to re and the imaginary part initialized to im. For example:complex z1(1.2,3.0), z2(3,4);
The third constructor creates a copy of a complex number. It is also called the X(X&) constructor. For example:
#include <oldcomplex.h> complex complexFunc() { // Invokes complex(double, double) complex z1(2.0,4.0); // Invokes complex(const complex&) complex z2 = z1; // Invokes complex(const complex&) to // create a temporary variable and adds // it to z1. return complex(1.1, 2.2) + z1; }
Operator Functions
The operators defined for complex are overloaded to have the same meaning as the built-in operators. For example, + is the addition of two complex variables just as it is used for the addition of two variables of type double. The operators in the complex class have the usual operator precedence.The five types of operators defined for the complex class are:
arithmetic | operator+ operator- operator* operator/ |
relational | operator&& operator|| operator! operator== |
assignment | complex::operator= complex::operator+= complex::operator-= complex::operator* complex::operator/ |
unary | complex::operator- complex::operator! |
stream | operator<< operator>> |
complex::operator=
- Header
- oldcomplex.h
- Prototype
- complex& complex::operator=(const complex& z);
complex& complex::operator=(double u); - Description
- Assigns a value to complex variable.
complex::operator+=
- Header
- oldcomplex.h
- Prototype
- complex& complex::operator+=(const complex& z);
complex& complex::operator+=(double u); - Description
- Adds a value to a complex variable and assigns the result to the complex variable.
complex::operator-=
- Header
- oldcomplex.h
- Prototype
- complex& complex::operator-=(const complex& z);
complex& complex::operator-=(double u); - Description
- Subtracts a value from a complex variable and assigns the result to the complex variable.
complex::operator*=
- Header
- oldcomplex.h
- Prototype
- complex& complex::operator*=(const complex& z);
complex& complex::operator*=(double u); - Description
- Multiplies a value by a complex variable and assigns the result to the complex variable.
complex::operator/=
- Header
- oldcomplex.h
- Prototype
- complex& complex::operator/=(const complex& z);
complex& complex::operator/=(double u); - Description
- Divides a complex variable by a value and assigns the result to the complex variable.
complex::operator-
- Header
- oldcomplex.h
- Prototype
- complex complex::operator-() const;
- Description
- Returns the negative of a complex number.
complex::operator!
- Header
- oldcomplex.h
- Prototype
- int complex::operator!() const;
- Description
- Performs logical negation on a complex number.
operator+
- Header
- oldcomplex.h
- Prototype
- complex operator+(const complex& z1, complex& z2);
complex operator+(double u, const complex& z);
complex operator+(const complex& z, double u); - Description
- Returns the sum of a complex number and any other number.
operator-
- Header
- oldcomplex.h
- Prototype
- complex operator-(const complex& z1, const complex& z2);
complex operator-(double u, const complex& z);
complex operator-(const complex& z, double u); - Description
- Returns the difference of a complex number and any other number.
operator*
- Header
- oldcomplex.h
- Prototype
- complex operator*(const complex& z1, const complex& z2);
complex operator*(double u, const complex& z);
complex operator*(const complex& z, double u); - Description
- Returns the product of a complex number and any other number.
operator/
- Header
- oldcomplex.h
- Prototype
- complex operator/(const complex& z1, const complex& z2);
complex operator/(double u, const complex& z);
complex operator/(const complex& z, double u); - Description
- Returns the quotient of a complex number and any other number.
operator&&
- Header
- oldcomplex.h
- Prototype
- complex operator&&(const complex& z1, const complex& z2);
complex operator&&(double u, const complex& z);
complex operator&&(const complex& z, double u); - Description
- Performs logical AND. Returns 0 if both arguments are 0 or (0, 0).
operator||
- Header
- oldcomplex.h
- Prototype
- complex operator||(const complex& z1, const complex& z2);
complex operator||(double u, const complex& z);
complex operator||(const complex& z, double u); - Description
- Performs logical OR. Returns 0 if both arguments are 0 or (0, 0).
operator!
- Header
- oldcomplex.h
- Prototype
- complex operator!=(const complex& z1, const complex& z2);
complex operator!=(double u, const complex& z);
complex operator!=(const complex& z, double u); - Description
- Tests for inequality.
operator==
- Header
- oldcomplex.h
- Prototype
- complex ::operator==(const complex& z1, const complex& z2);
complex ::operator==(double u, const complex& z);
complex ::operator==(const complex& z, double u); - Description
- Tests for equality.
operator<<
- Header
- oldcomplex.h
- Prototype
- ostream& operator<<(ostream& s, const complex& z);
- Description
- Reads z from the stream s, in the form(real, imaginary).
operator>>
- Header
- oldcomplex.h
- Prototype
- istream& operator>>(istream& s, const complex& z);
- Description
- Reads z from the stream s, in the form(real, imaginary).
Complex Functions
The complex functions are unique to the complex type and do not overload names of the ANSI C math library.arg
- Header
- oldcomplex.h
- Prototype
- double arg(const complex& z);
- Description
- The arg function determines the angle, in radians, of the number in
the complex plane specified in the x argument. The positive real axis
has angle 0; the positive imaginary axis has angle pi/2.The arg function is equivalent to:
atan2(imag(x), real(x))
complex::imag, complex::real
- Header
- oldcomplex.h
- Prototype
- double& complex::imag();
double& complex::real(); - Description
- complex::imag returns the imaginary portion of a complex number; complex::real returns the real portion. Either function can be on the left side or right side of an assignment statement.
- Example
For complex::imag For complex::real #include <oldcomplex.h> #include <oldcomplex.h> complex z1(1.0,2.0), z2; complex z1(1.0,2.0), z2; z1.imag() = z2.imag(); z1.real() = z2.real();
conj
- Header
- oldcomplex.h
- Prototype
- complex conj(const complex& z);
- Description
- Returns the complex conjugate of a complex number. If the complex number z is x+iy, then conj(z) is x-iy.
imag
- Header
- oldcomplex.h
- Prototype
- double imag(const complex& z);
- Description
- Returns the imaginary portion of a complex number. It can be on only the right side of an assignment statement.
modulus
- Header
- oldcomplex.h
- Prototype
- double modulus(const complex& z);
- Description
- Returns the absolute value of a complex number. The absolute value of a complex number is also called the modulus. modulus(z) is equal to abs(z), which is sqrt (x * x + y * y).
norm
- Header
- oldcomplex.h
- Prototype
- double norm(const complex& z);
- Description
- Returns the square of the absolute value of a complex number. For z, of form (x + iy), conj(z) = (x * x + y * y).
polar
- Header
- oldcomplex.h
- Prototype
- complex polar(double range, double theta);
- Description
- Returns the complex number that is the result of converting polar
coordinates range and theta to x and y coordinates. This is equivalent to
using the formula:
complex(range * cos(theta), range * sin(theta));
real
- Header
- oldcomplex.h
- Prototype
- double real(const complex& z);
- Description
- Returns the real portion of a complex number. It can be on only the right side of an assignment statement.
Trigonometric and hyperbolic functions
The trigonometric and hyperbolic functions overload the names of ANSI C library floating-point trigonometric and hyperbolic functions.
acos
- Header
- oldcomplex.h
- Prototype
- complex acos(const complex& z);
- Description
- Returns the arccosine of a complex number.
asin, asinh
- Header
- oldcomplex.h
- Prototype
- complex asin(const complex& z);
complex asinh(const complex& z); - Description
- asin returns the arcsine of a complex number. asinh returns the hyperbolic arcsine of a complex number.
atan, atanh
- Header
- oldcomplex.h
- Prototype
- complex atan(const complex& z);
complex atanh(const complex& z); - Description
- atan returns the arctangent of a complex number. atanh returns the hyperbolic arctangent of a complex number.
cos, cosh
- Header
- oldcomplex.h
- Prototype
- complex cos(const complex& z);
complex cosh(const complex& z); - Description
- cos returns the cosine of a complex number. cosh returns the hyperbolic cosine of a complex number.
sin, sinh
- Header
- oldcomplex.h
- Prototype
- complex sin (const complex& z);
complex sinh(const complex& z); - Description
- sin returns the sine of a complex number. sinh returns the hyperbolic sine of a complex number.
tan, tanh
- Header
- oldcomplex.h
- Prototype
- complex tan(const complex& z);
complex tanh(const complex& z); - Description
- tan returns the tangent of a complex number. tanh returns the hyperbolic tangent of a complex number.
Mathematical functions
The mathematical functions overload functions contained in the ANSI C math library to provide consistent complex support.abs
- Header
- oldcomplex.h
- Prototype
- double abs(const complex&);
- Description
- Returns the absolute value of a complex number.
exp
- Header
- oldcomplex.h
- Prototype
- complex exp(const complex&);
- Description
- Returns the value of e raised to a complex number.
log, log10
- Header
- oldcomplex.h
- Prototype
- complex log(const complex&);
complex log10(const complex&); - Description
- log returns the logarithm base e of a complex number. log10 returns the logarithm base 10 of a complex number.
pow
- Header
- oldcomplex.h
- Prototype
- complex pow(const complex&, double);
complex pow(const complex&, const complex &);
complex pow(double, const complex&);
complex pow(const complex&, int); - Description
- Returns any number raised to a complex number or vice versa.
sqrt
- Header
- oldcomplex.h
- Prototype
- complex sqrt(const complex&);
- Description
- Returns the square root of a complex number.