cpp4.cxx
/* -*- C++ -*- */
/*************************************************************************
* Copyright(c) 1995~2005 Masaharu Goto (cint@pcroot.cern.ch)
*
* For the licensing terms see the file COPYING
*
************************************************************************/
/**************************************************************************
* cpp4.c
*
* function, operator overloading
* and implicit type conversion
*
**************************************************************************/
#include <stdlib.h>
#include <stdio.h>
/**********************************************************
* class complex
**********************************************************/
class complex {
public:
double re,im;
//complex(double re=2,double im=4); // TODO, problem if argument name
// differ between header and function definition.
complex(double real=2,double imag=4);
void print(void) { printf("re=%g , im=%g\n",re,im); }
} ;
complex::complex(double real,double imag)
{
re=real;
im=imag;
}
complex operator + (complex a, complex b)
{
complex c;
c.re = a.re + b.re ;
c.im = a.im + b.im ;
return(c);
}
/* Done by implicit conversion
complex operator + (double a, complex b)
{
complex c;
c.re = a + b.re ;
c.im = b.im ;
return(c);
}
complex operator + (complex a, double b)
{
complex c;
c.re = a.re + b ;
c.im = a.im ;
return(c);
}
*/
complex operator - (complex a, complex b)
{
complex c;
c.re = a.re - b.re ;
c.im = a.im - b.im ;
return(c);
}
complex operator - (double a, complex b)
{
complex c;
c.re = a - b.re ;
c.im = - b.im ;
return(c);
}
complex operator - (complex a, double b)
{
complex c;
c.re = a.re - b ;
c.im = a.im ;
return(c);
}
complex operator * (complex a, complex b)
{
complex c;
c.re = a.re * b.re - a.im * b.im ;
c.im = a.re * b.im + a.im * b.re ;
return(c);
}
complex operator * (double a, complex b)
{
complex c;
c.re = a * b.re;
c.im = a * b.im;
return(c);
}
complex operator * (complex a, double b)
{
complex c;
c.re = a.re * b ;
c.im = a.im * b;
return(c);
}
complex plus(complex a,complex b)
{
complex c;
c.re = a.re + b.re ;
c.im = a.im + b.im ;
return(c);
}
/**********************************************************
* main program
**********************************************************/
const complex j(0,1);
int main ()
{
complex a,b(3,4),c;
a.re = 1 ;
a.im = 2 ;
//b.re = 3;
//b.im = 4;
c = a + b;
c.print();
c = a*5;
c.print();
c = 30*a;
c.print();
c = a * b;
c.print();
c = a + b - j*3;
c.print();
c = a + 3; // problem
c.print();
c = plus(a,b);
c.print();
c = plus(a,7);
c.print();
c = plus(15,b);
c.print();
// c = 51;
// c.print();
return 0;
}