自写一些基本的运算符重载
只写了简单的输入输出加法和前后置++
#include <iostream>
using namespace std;
class T
{
public:
T() :m_a(0), m_b(0){};
T(int a, int b) :m_a(a), m_b(b){}
friend ostream & operator<<(ostream & out, const T & x);//如果返回值不是引用的话,那么很可能将一个临时对象赋值返回值,无法完成级联输入,所以规定返回值为istream引用形式
friend istream & operator>>(istream & out, T & x);
T operator+(T & x);
T operator++(int);//C++用一个哑元参数来区分重载的前置和后置++;后置++带参数,而后置++不带
T & operator++(void);
private:
int m_a;
int m_b;
};
ostream & operator<<(ostream & out, const T & x)
{
if (x.m_b == 0)
{
out << x.m_a << endl;
return out;
}
if (x.m_a == 0)
{
out << x.m_b << "i" << endl;
return out;
}
out << x.m_a << " + " << x.m_b <<"i"<< endl;
return out;
}
istream & operator>>(istream & in, T & x)
{
in >> x.m_a >> x.m_b;
return in;
}
T T::operator+(T & x)
{
return T(m_a + x.m_a, m_b + x.m_b);
}
T T::operator++(int)
{
T temp = *this;
m_a++;
m_b++;
return temp;
}
T & T::operator++(void)
{
m_a++;
m_b++;
return *this;
}
int main()
{
T A(1, 1);
T B(2, 2);
T C = A + B;
cout << "A = " << A << endl;
cout << "B = " << B<< endl;
cout << "C = " << C << endl;
T D = C++;
cout << "D = " << D << endl;
cout << "C = " << C << endl;
cout << "D = " << ++D + D++<< endl;
system("pause");
return 0;
}
在VS2013下的运行结果