#include <iostream>
// overloading "operator + "
// 要考虑加法的形式
// a+1
// a+a
// 1+a
//////////////////////////////////////////////////////////
class Rectangle
{
public:
Rectangle(const int w, const int h)
: width(w), height(h)
{};
~Rectangle() {};
Rectangle operator+ (const int& i) const; // a+1,这里不能返回引用
Rectangle operator+ (const Rectangle& i) const; // a+a
// 1+a,定义在class之外
public:
int width;
int height;
};
//////////////////////////////////////////////////////////
Rectangle
Rectangle::operator+(const int& i) const // a+1
{
Rectangle r(*this);
r.width += i;
r.height += i;
return r;
}
Rectangle
Rectangle::operator+(const Rectangle& rec) const // a+a
{
Rectangle r(*this);
r.width += rec.width;
r.height += rec.height;
return r;
}
//////////////////////////////////////////////////////////
std::ostream&
operator<< (std::ostream& os, const Rectangle& rec)
{
os << rec.width << ", " << rec.height;
return os;
}
Rectangle
operator+(const int i, const Rectangle& rec) // 1+a
{
Rectangle r(rec);
r.width += i;
r.height += i;
return r;
}
//////////////////////////////////////////////////////////
int main()
{
Rectangle a(40, 10);
std::cout << "a+1 = " << a + 1 << std::endl;
std::cout << "a+a = " << a + a << std::endl;
std::cout << "1+a = " << 1 + a << std::endl;
// 这种形式,先计算1+a,然后a+a,最后a+1。
std::cout
<< "a+1 = " << a + 1 << std::endl
<< "a+a = " << a + a << std::endl
<< "1+a = " << 1 + a << std::endl
;
return 0;
}