码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 运算符重载

时间:2015-05-09 13:26:31      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:运算符重载      友元函数   

C++实现运算符重载

#include <iostream>
using namespace std;

//#define SHOW

class Int
{
    friend bool operator>(const Int& x,const Int& y);
    //friend int operator>(const Int& x,const Int& y);
    friend bool operator<(const Int& x,const Int& y);
    friend bool operator==(const Int& x,const Int& y);
    friend Int operator<<(const Int& x,const Int& y);
    friend Int operator>>(const Int& x,const Int& y);
    friend Int& operator+=(Int& x,const Int& y);
    friend Int& operator-=(Int& x,const Int& y);
    friend Int& operator*=(Int& x,const Int& y);
    friend Int& operator/=(Int& x,const Int& y);

    friend ostream& operator<<(ostream& out,const Int& x);  //重载流插入运算符<<
    friend istream& operator>>(istream& input,const Int& x);//重载流提取运算符>>

public:
    Int(int x=0):i(x)
    {
        #ifdef SHOW
        cout<<"Creat Int Obj : "<<this<<endl;
        #endif // SHOW
    }
    Int(const Int& x)
    {
        #ifdef SHOW
        cout<<"Copy Int Obj : "<<this<<endl;
        #endif // SHOW
    }
    Int& operator=(const Int& x)
    {
        #ifdef SHOW
        cout<<"Assign,"<<this<<" : "<<&x<<endl;
        #endif // SHOW
        if(this != &x)
        {
            i = x.i;
        }
        return *this;
    }
    ~Int()
    {
        #ifdef SHOW
        cout<<"Free Int Obj : "<<this<<endl;
        #endif // SHOW
    }

    const Int operator+(const Int& x);
    const Int operator-(const Int& x);
    const Int operator*(const Int& x);
    const Int operator/(const Int& x);
    const Int operator%(const Int& x);
    const Int operator&(const Int& x);
    const Int operator|(const Int& x);
    const Int operator^(const Int& x);
    const Int operator~();
    const Int operator!();
    const Int operator++();   //前置++运算符
    const Int operator++(int);//后置++运算符
    const Int operator--();   //前置--运算符
    const Int operator--(int);//后置--运算符
    const Int operator+=(const Int& x);
    const Int operator-=(const Int& x);

private:
    int i;
};

ostream& operator<<(ostream& out,const Int& x)
{
    out<<x.i;
    return out;
}
istream& operator>>(istream& input,const Int& x)
{
    input>>x.i;
    return input;
}
bool operator>(const Int& x,const Int& y)
{
    if(x.i>y.i)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int operator>(const Int& x ,const Int& y)
{
    return x.i>y.i;
}
bool operator<(const Int& x,const Int& y)
{
    if(x.i<y.i)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool operator==(const Int& x,const Int& y)
{
    if(x.i==y.i)
    {
        return true;
    }
    else
    {
        return false;
    }
}
Int operator<<(const Int& x,const Int& y)
{
    return (x.i<<y.i);
}
Int operator>>(const Int& x,const Int& y)
{
    return (x.i>>y.i);
}
Int& operator+=(Int& x,const Int& y)
{
    x.i += y.i;
    return x;
}
Int& operator-=(Int& x,const Int& y)
{
    x.i -= y.i;
    return x;
}
Int& operator*=(Int& x,const Int& y)
{
    x.i *= y.i;
    return x;
}
Int& operator/=(Int& x,const Int& y)
{
    x.i /= y.i;
    return x;
}


const Int Int::operator+(const Int& x)
{
    return (i+x.i);
}
const Int Int::operator-(const Int& x)
{
    return (i-x.i);
}
const Int Int::operator*(const Int& x)
{
    return (i*x.i);
}
const Int Int::operator/(const Int& x)
{
    return (i/x.i);
}
const Int Int::operator%(const Int& x)
{
    return (i%x.i);
}
const Int Int::operator&(const Int& x)
{
    return (i&x.i);
}
const Int Int::operator|(const Int& x)
{
    return (i|x.i);
}
const Int Int::operator^(const Int& x)
{
    return (i^x.i);
}
const Int Int::operator~()
{
    return ~i;
}
const Int Int::operator!()
{
    return !i;
}
const Int Int::operator++()
{
    ++ i;
    return *this;
}
const Int Int::operator++(int)
{
    Int tmp(*this);
    i ++;
    return tmp;
}
const Int Int::operator--()
{
    -- i;
    return *this;
}
const Int Int::operator--(int)
{
    Int tmp(*this);
    i --;
    return tmp;
}

int main()
{
    Int t(10),t1(9),t2(3);
    t = t1 + t2;
    cout<<t<<endl;
    t = t1 - t2;
    cout<<t<<endl;
    t = t1 * t2;
    cout<<t<<endl;
    t = t1 / t2;
    cout<<t<<endl;
    t = t1 % t2;
    cout<<t<<endl;
    ++ t;
    cout<<t<<endl;
    t ++;
    cout<<t<<endl;
    -- t;
    cout<<t<<endl;
    t --;
    cout<<t<<endl;
    t = t1>t2;
    cout<<t<<endl;
    t = t1<t2;
    cout<<t<<endl;
    t = t1==t2;
    cout<<t<<endl;
    t = t1&t2;
    cout<<t<<endl;
    t = t1|t2;
    cout<<t<<endl;
    t = t1^t2;
    cout<<t<<endl;
    t = ~t1;
    cout<<t<<endl;
    t= !t1;
    cout<<t<<endl;
    t = t1<<t2;
    cout<<t<<endl;
    t = t1>>t2;
    cout<<t<<endl;
    t += t1;
    cout<<t<<endl;
    t -= t1;
    cout<<t<<endl;
    t *= t1;
    cout<<t<<endl;
    t /= t1;
    cout<<t<<endl;
    return 0;
}



C++ 运算符重载

标签:运算符重载      友元函数   

原文地址:http://blog.csdn.net/yangjiankang_0929/article/details/45600257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!