为了更深入的理解返回引用和对象,以及运算符重载,做了int的运算符重载:
#include <iostream>
using namespace std;
class Int;
ostream& operator<<(ostream &out, const Int &i);
class Int
{
friend ostream& operator<<(ostream &out, const Int &i);
public:
Int(int i = 0) : m_i(i)
{}
~Int()
{}
public:
Int operator+(const Int &i);
Int operator-(const Int &i);
Int operator*(const Int &i);
Int operator/(const Int &i);
Int operator+=(const Int &i);
Int operator-=(const Int &i);
Int operator*=(const Int &i);
Int operator/=(const Int &i);
Int operator%(const Int &i);
Int operator^(const Int &i);
Int operator%=(const Int &i);
Int operator^=(const Int &i);
Int& operator++(); //前置++
Int operator++(int); //后置++
Int& operator--();
Int operator--(int);
Int& operator+(); //正a
Int& operator-(); //负a
Int& operator~(); //取反
Int& operator!(); //取非
Int& operator>>(int n); //右移
Int& operator<<(int n); //左移
Int& operator>>=(int n); //右移等
Int& operator<<=(int n); //左移等
bool operator>(const Int &i);
bool operator<(const Int &i);
bool operator>=(const Int &i);
bool operator<=(const Int &i);
bool operator==(const Int &i);
bool operator!=(const Int &i);
Int operator&(const Int &i); //与运算(位)
Int operator|(const Int &i); //或运算(位)
bool operator&&(const Int &i);
bool operator||(const Int &i);
private:
int m_i;
};
ostream& operator<<(ostream &out, const Int &i)
{
out << (i.m_i);
return out;
}
Int Int::operator+(const Int &i)
{
return Int(m_i + i.m_i);
}
Int Int::operator-(const Int &i)
{
return Int(m_i - i.m_i);
}
Int Int::operator*(const Int &i)
{
return Int(m_i * i.m_i);
}
Int Int::operator/(const Int &i)
{
return Int(m_i / i.m_i);
}
Int Int::operator+=(const Int &i)
{
return Int(m_i += i.m_i);
}
Int Int::operator-=(const Int &i)
{
return Int(m_i -= i.m_i);
}
Int Int::operator*=(const Int &i)
{
return Int(m_i *= i.m_i);
}
Int Int::operator/=(const Int &i)
{
return Int(m_i /= i.m_i);
}
Int Int::operator%(const Int &i)
{
return Int(m_i % i.m_i);
}
Int Int::operator^(const Int &i)
{
return Int(m_i ^ i.m_i);
}
Int Int::operator%=(const Int &i)
{
return Int(m_i %= i.m_i);
}
Int Int::operator^=(const Int &i)
{
return Int(m_i ^= i.m_i);
}
Int& Int::operator++() //前置++
{
m_i++;
return *this;
}
Int Int::operator++(int) //后置++
{
Int tmp(m_i);
m_i += 1;
return tmp;
}
Int& Int::operator--() //前置--
{
m_i--;
return *this;
}
Int Int::operator--(int) //后置--
{
Int tmp(*this);
m_i -= 1;
return tmp;
}
Int& Int::operator+() //正a
{
m_i = +m_i;
return *this;
}
Int& Int::operator-() //负a
{
m_i = -m_i;
return *this;
}
Int& Int::operator~() //取反
{
m_i = ~m_i;
return *this;
}
Int& Int::operator!() //取非
{
m_i = !m_i;
return *this;
}
Int& Int::operator>>(int n) //右移
{
m_i = (m_i >> n);
return *this;
}
Int& Int::operator<<(int n) //左移
{
m_i = (m_i << n);
return *this;
}
Int& Int::operator>>=(int n) //右移等
{
m_i >>= n;
return *this;
}
Int& Int::operator<<=(int n) //左移等
{
m_i <<= n;
return *this;
}
bool Int::operator>(const Int &i)
{
return m_i > i.m_i;
}
bool Int::operator<(const Int &i)
{
return m_i < i.m_i;
}
bool Int::operator>=(const Int &i)
{
return m_i >= i.m_i;
}
bool Int::operator<=(const Int &i)
{
return m_i <= i.m_i;
}
bool Int::operator==(const Int &i)
{
return m_i == i.m_i;
}
bool Int::operator!=(const Int &i)
{
return m_i != i.m_i;
}
Int Int::operator&(const Int &i) //与运算(位)
{
Int tmp;
tmp.m_i = (m_i & i.m_i);
return tmp;
}
Int Int::operator|(const Int &i) //或运算(位)
{
Int tmp;
tmp.m_i = m_i | i.m_i;
return tmp;
}
bool Int::operator&&(const Int &i)
{
return m_i && i.m_i;
}
bool Int::operator||(const Int &i)
{
return m_i || i.m_i;
}
int main()
{
Int i;
Int i1(1);
Int i2(2);
cout << "i1 + i2 = " << i1 + i2 << endl;
cout << "i1 - i2 = " << i1 - i2 << endl;
cout << "i1 * i2 = " << i1 * i2 << endl;
cout << "i1 / i2 = " << i1 / i2 << endl;
cout << "i1 += 2 = " << (i1 += 2) << endl;
cout << "i1 -= i2 = " << (i1 -= i2) << endl;
cout << "i1 *= i2 = " << (i1 *= i2) << endl;
cout << "i1 /= i2 = " << (i1 /= i2) << endl;
cout << "i1 % i2 = " << (i1 % i2) << endl;
cout << "i1 ^ i2 = " << (i1 ^ i2) << endl;
cout << "i1 %= 1 = " << (i1 %= 1) << endl;
cout << "i2 ^= 3 = " << (i2 ^= 3) << endl;
Int i3(1);
Int i4(1);
cout << "++i3 = " << ++i3 << endl;
cout << "i4++ = " << i4++ << endl;
cout << "--i3 = " << --i3 << endl;
cout << "i4-- = " << i4-- << endl;
Int i5(2);
Int i6(3);
cout << (i5 == i6) << endl;
cout << (i5 != i6) << endl;
cout<< "(i5 <<= 1) = " << (i5 <<= 1) << endl;
cout<< "(i5 <<= 1) = " << (i5 <<= 1) << endl;
cout<< "(i6 || 1) = " << (i6 || 1) << endl;
cout<< "(i6 && 0) = " << (i6 && 0) << endl;
cout<< "(i6 | 1) = " << (i6 | 1) << endl;
cout<< "(i6 & 1) = " << (i6 & 1) << endl;
cout<< "-i6 = " << -i6 <<endl;
cout<< "~i6 = " << ~i6 <<endl;
return 0;
}