c++ operator重载的例子

#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;
}

作者: gaofengthucs   发布时间: 2011-06-09