#include <iostream>
using
namespace
std;
class
A
{
public
:
A(
double
_data = 0.0):data(_data){}
A& operator = (
const
A& rhs)
{
data = rhs.data;
return
*
this
;
}
friend
A operator + (
const
A& lhs,
const
A& rhs);
friend
A operator - (
const
A& lhs,
const
A& rhs);
friend
A operator * (
const
A& lhs,
const
A& rhs);
friend
A operator + (
const
A& lhs,
double
rhs);
friend
A operator + (
double
lhs,
const
A& rhs);
friend
A operator * (
const
A& lhs,
double
rhs);
friend
A operator * (
double
lhs,
const
A& rhs);
friend
A operator - (
const
A& lhs,
double
rhs);
friend
A operator - (
double
lhs,
const
A& rhs);
friend
ostream& operator << (ostream& fout,A& a);
// A& operator += (const A& rhs);
// A& operator -= (const A& rhs);
// A& operator *= (const A& rhs);
private
:
double
data;
};
A operator + (
const
A& lhs,
const
A& rhs)
{
A res(0);
res.data = lhs.data + rhs.data;
return
res;
}
A operator - (
const
A& lhs,
const
A& rhs)
{
A res(0);
res.data = lhs.data - rhs.data;
return
res;
}
A operator * (
const
A& lhs,
const
A& rhs)
{
A res(0);
res.data = lhs.data * rhs.data;
return
res;
}
A operator + (
const
A& lhs,
double
rhs)
{
A res(0);
res.data = lhs.data + rhs;
return
res;
}
A operator + (
double
lhs,
const
A& rhs)
{
A res(0);
res.data = lhs + rhs.data;
return
res;
}
A operator * (
const
A& lhs,
double
rhs)
{
A res(0);
res.data = lhs.data * rhs;
return
res;
}
A operator * (
double
lhs,
const
A& rhs)
{
A res(0);
res.data = lhs * rhs.data;
return
res;
}
A operator - (
const
A& lhs,
double
rhs)
{
A res(0);
res.data = lhs.data - rhs;
return
res;
}
A operator - (
double
lhs,
const
A& rhs)
{
A res(0);
res.data = lhs - rhs.data;
return
res;
}
ostream& operator << (ostream& fout,A& a)
{
fout << a.data ;
return
fout;
}
int
main(
int
argc,
char
* argv[])
{
A a(2.3);
A b(1.2);
A d(3.4);
A c;
c = a + b + d;
c=a+b;
c=a+1.0;
c=a-b;
c=a-1.0;
c=a*b;
c=a*1.0;
cout << c << endl;
c=1.0+2.0*a*a-3.0*a*b;
cout << c << endl;
return
0;
}