c++运算符重载

xiaoxiao2021-02-28  121

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; }
转载请注明原文地址: https://www.6miu.com/read-61821.html

最新回复(0)