#ifndef __COMPLEX_H__                // Ex44
#define __COMPLEX_H__                // protect against multiple inclusion
#include <iostream>                    // access: ostream
using std::ostream;
extern void complexStats();
class complex {
    friend complex operator+( complex a, complex b );
    friend ostream &operator<<( ostream &os, complex c );
    struct complexImpl;                // hidden implementation, nested class
    complexImpl &impl;                // indirection to implementation
  public:
    complex();
    complex( double r );
    complex( double r, double i );
    ~complex();
    complex( const complex &c );    // copy constructor
    complex &operator=( const complex &c ); // assignment operator
    double abs();
};
extern complex operator+( complex a, complex b );
extern ostream &operator<<( ostream &os, complex c );
#endif    // __COMPLEX_H__
