

#include <complex.h>initializes yy as a complex number of the form (real+imag*i), evaluates the expressions and prints the result: (0.96476,1.21825).main(){ complex xx; complex yy = complex(1,2.718); xx = log(yy/3); cout << 1+xx; }
The C++ language does not have a builtin data type for complex numbers, but it does provide language facilities for defining new data types. The type complex is an example of how such a type is as easy to use, and almost as efficient, as a builtin type.
This facility for complex arithmetic provides the arithmetic operators +, /, , and , the assignment operators =, +=, =, =, and /=, and the comparison operators == and != for complex numbers. Expressions such as (xx+1)log(yylog(3.2)) that involve a mixture of real and complex numbers are handled correctly. The simplest complex operations, for example + and +=, are implemented without function call overhead. Input and output can be done using the operators >> (get from) and << (put to). The initialization functions and >> accept a Cartesian representation of a complex. The functions real() and imag() return the real and imaginary part of a complex, respectively, and << prints a complex as (real,imaginary). The internal representation of a complex, is, however, inaccessible and in principle unknown to a user.
Polar coordinates can also be used. The function polar() creates a complex given its polar representation, and abs() and arg() return the polar magnitude and angle, respectively, of a complex. The function norm() returns the square of the magnitude of a complex. The following complex functions are also provided: sqrt(), exp(), log(), sin(), cos(), sinh(), cosh(), pow(), and conj().
A complete program using complex numbers can be found under ``An FFT function''
The complex type described in this topic is similar, but not identical, to the double_complex type being specified in the upcoming ANSI/ISO C++ language standard. In particular, unlike the upcoming standard, no complex type is defined for float or long double types.