1.类的实现运算符函数–左调右参
L . operator# (R)
Complex const operator+ ( Complex const &rhs) const
{
return Complex (m_r + rhs.m_r, m_i + rhs.m_i);
}
2.全局中重载运算符函数–左一右二,返回匿名类型。
L ::operator# ( L , R )
Complex const operator- (Complex const &lhs, Complex const &rhs)
{
return Complex (lhs.m_r - rhs.m_r, rhs.m_i - rhs.m_i);
}
Complex c1(1,2), c2(3,4);
(c1 + c2).show(); // c1.operator+ (c2)
(c2 - c1).show(); // ::operator-(c2, c1);
也可以将外部运算符重载作为 友元 函数 在类中声明。
friend Complex& operator-= (Complex &lhs, Complex const &rhs)
{
lhs.m_r -= rhs.m_r;
lhs.m_i -= rhs.m_i;
return lhs;
}
friend istream &operator>> (istream &lhs, Complex &rhs)
{
return lhs >> rhs.m_r >> rhs.m_i;
}
friend ostream &operator<< (ostream &lhs, Complex const &rhs)
{
return lhs << rhs.m_r << '+' << rhs.m_i << 'i';
}