双目运算符重载
- 等号运算符重载如果不自己实现,系统会自己生成一个
- 其他的运算符重载,如果需要使用的话,必须自己实现
class Complex
{
public:
Complex(int a, int b)
{
_a = a;
_b = b;
}
//可以根据需要来选择是否要实现拷贝构造函数,析构函数等
Complex operator+(const Complex& src)//加号运算符重载,-、*、/、&&、||与这个类似
{
int a = _a + src._a;
int b = _b + src._b;
return Complex(a, b);
}
private:
int _a;
int _b;
};
int main()
{
Complex a(1, 2);
Complex b(2, 3);
Complex c = a + b;
}
class Complex
{
public:
Complex(int a, int b)
{
_a = a;
_b = b;
}
Complex operator+(const Complex& src)
{
int a = _a + src._a;
int b = _b + src._b;
return Complex(a, b);
}
friend void operator <<(ostream& out, const Complex& src);
private:
int _a;
int _b;
};
void operator <<(ostream& out, const Complex& src)
{
out << src._a << "+" << src._b << "i" << endl;
}
int main()
{
Complex a(1, 2);
Complex b(2, 3);
Complex c = a + b;
cout << c;
cout << c << a;//error,? 因为返回值,改进方法如下
return 0;
}
class Complex
{
public:
Complex(int a, int b)
{
_a = a;
_b = b;
}
Complex operator+(const Complex& src)
{
int a = _a + src._a;
int b = _b + src._b;
return Complex(a, b);
}
friend ostream& operator <<(ostream& out, const Complex& src);
private:
int _a;
int _b;
};
ostream& operator <<(ostream& out, const Complex& src)
{
out << src._a << "+" << src._b << "i" << endl;
return out;
}
int main()
{
Complex a(1, 2);
Complex b(2, 3);
Complex c = a + b;
cout << c;
cout << c << a;
return 0;
}
单目运算符重载
前置++重载
class Complex
{
public:
Complex(int a, int b)
{
_a = a;
_b = b;
}
friend ostream& operator <<(ostream& out, const Complex& src);
Complex& operator++()
{
++_a;
return *this;
}
private:
int _a;
int _b;
};
ostream& operator <<(ostream& out, const Complex& src)
{
out << src._a << "+" << src._b << "i" << endl;
return out;
}
int main()
{
Complex a(1, 2);
++a;
cout << a;
return 0;
}
后置++重载
class Complex
{
public:
Complex(int a, int b)
{
_a = a;
_b = b;
}
friend ostream& operator <<(ostream& out, const Complex& src);
Complex operator++(int) //后置++重载与前置++的区别就是后置++的int,int无实质作用
{
int tmp = _a;
_a++;
return Complex(tmp, _b); //返回的是一个临时对象,所以不能用引用去接收
}
private:
int _a;
int _b;
};
ostream& operator <<(ostream& out, const Complex& src)
{
out << src._a << "+" << src._b << "i" << endl;
return out;
}
int main()
{
Complex a(1, 2);
Complex b = a++;
cout << a;
cout << b;
return 0;
}