c++运算符重载

来源:互联网 发布:jdk 7u79 windows x86 编辑:程序博客网 时间:2024/05/21 01:53

1 重载输出运算符
通常情况下,输出运算符的第一个形参为一个非常量ostream的引用。第二个形参一般来说为一个常量的引用。
operator<<一般要返回它的ostream形参

ostream &operator<<(ostream&out,const coordinte& coor){out<<coor.m_ix<<" "<<coor.m_iY;return out;}

2 重载输入运算符

istream &operator<<(istream&is,const coordinte& coor){is>>coor.m_ix>>" ">>coor.m_iY;return is;}

举例
(双目运算符)

//当数据成员为公有的情况下class coordinate{    //friend ostream &operator<<(ostream &out, const coordinate &coor);public:    coordinate(int x, int y)    {        m_ix = x;        m_iy = y;    }    int m_ix;    int m_iy;};coordinate operator + (coordinate coor1, coordinate coor2)//加号运算符重载{    return coordinate(coor1.m_ix + coor2.m_ix, coor2.m_iy + coor1.m_iy);}ostream &operator<<(ostream &out, const coordinate &coor) //<<输出运算符重载{    out << coor.m_iy << coor.m_ix;    return out;}int main(){    coordinate coor1(10, 20), coor2(20, 10), sum(0, 0);    sum = coor1 + coor2;    cout << sum << endl;    system("pause");}

当数据成员为私有的情况下,可以采用如下两种方式:
1,友元函数重载

class coordinate{    friend ostream &operator<<(ostream &out, const coordinate &coor);    friend coordinate operator + (coordinate coor1, coordinate coor2);//加上的两行代码(两个形参)public:    coordinate(int x, int y)    {        m_ix = x;        m_iy = y;    }private:    int m_ix;    int m_iy;};coordinate operator + (coordinate coor1, coordinate coor2)//加号运算符重载{    return coordinate(coor1.m_ix + coor2.m_ix, coor2.m_iy + coor1.m_iy);}ostream &operator<<(ostream &out, const coordinate &coor) //<<输出运算符重载{    out << coor.m_iy << coor.m_ix;    return out;}

2,类外定义

class coordinate{    friend ostream &operator<<(ostream &out, const coordinate &coor);public:    coordinate(int x, int y)    {        m_ix = x;        m_iy = y;    }    coordinate operator + (coordinate coor);private:    int m_ix;    int m_iy;};coordinate coordinate::operator + (coordinate coor1)//加号运算符重载(注意一个形参){    return coordinate(coor1.m_ix + m_ix, coor1.m_iy + m_iy);//等价于return coordinate(coor1.m_ix + this->m_ix, coor1.m_iy + this->m_iy);}ostream &operator<<(ostream &out, const coordinate &coor) //<<输出运算符重载{    out << coor.m_iy << coor.m_ix;    return out;}int main(){    coordinate coor1(10, 20), coor2(20, 10), sum(0, 0);    sum = coor1 + coor2;    cout << sum << endl;    system("pause");}

单目运算符
成员函数

public:    coordinate(int x, int y)    {        m_ix = x;        m_iy = y;    }    coordinate operator + (coordinate coor);    coordinate operator++ ();//前置    coordinate operator++(int);//后置private:    int m_ix;    int m_iy;};coordinate coordinate::operator++(){    m_ix++;//等价预++m_ix 或者 ++this->m_ix    m_iy++;    return *this;}coordinate coordinate::operator++(int){    coordinate old(*this);    m_ix++;    m_iy++;    return old;}

友元函数

class coordinate{    friend ostream &operator<<(ostream &out, const coordinate &coor);    //friend coordinate operator + (coordinate coor1, coordinate coor2);//加上的两行代码    friend coordinate operator++(coordinate& coor1);//友元函数重载前置++    friend coordinate operator++(coordinate& coor1, int);//友元函数重载后置++public:    coordinate(int x, int y)    {        m_ix = x;        m_iy = y;    }    coordinate operator + (coordinate coor);    //coordinate operator++ ();//前置    //coordinate operator++(int);//后置private:    int m_ix;    int m_iy;};coordinate operator++(coordinate& coor1){    coor1.m_ix++;    coor1.m_iy++;    return coor1;}coordinate operator++(coordinate &coor1, int){    coordinate coora(coor1);    coor1.m_iy++;    coor1.m_iy++;    return coora;}
0 0
原创粉丝点击