Complex &operator++() {
real += 1;
vir += 1;
return *this;
}
其中&的作用是为了解决(++com)++的问题,com是Complex的一个对象,如果不加&那么++com返回值就不止com本身,之后的com++就不会在com的基础上++,最后cout << com;就只加了一个1,如果加了&就加了两个1
ostream &operator<<(ostream &out, const Complex &com) {}
其中&的作用是为了实现连续输出。
Complex &operator++(int);与Complex &operator++();的区别
第一个是处理++com的情况,第二个是处理com++的情况
想要返回值只能被访问不能被修改则在函数最前面加一个const
例:
const int operator[](...) const {}
以下是自己实现的一个复数类代码
#include<iostream> using namespace std; class Complex { public: Complex(int real, int vir) : real(real), vir(vir) { cout << "Constructor : " << this << endl; } Complex operator+(int val) { return Complex(real + val, vir + val); } Complex operator++(int val) { Complex ret(*this); real += 1; vir += 1; return ret; } Complex &operator++() { real += 1; vir += 1; return *this; } Complex operator--(int val) { Complex ret(*this); real -= 1; vir -= 1; return ret; } Complex &operator--() { real -= 1; vir -= 1; return *this; } Complex operator-(int val) { return Complex(real - val, vir - val); } Complex operator*(int val) { return Complex(real * val, vir * val); } Complex operator/(int val) { return Complex(real / val, vir / val); } friend Complex operator+(const Complex &, const Complex &); friend Complex operator*(const Complex &, const Complex &); friend Complex operator/(const Complex &, const Complex &); friend Complex operator-(const Complex &, const Complex &); friend void output(Complex &); friend ostream &operator<<(ostream &, const Complex &); private: int real, vir; }; Complex operator+(const Complex &a, const Complex &b) { return Complex(a.real + b.real, a.vir + b.vir); } Complex operator-(const Complex &a, const Complex &b) { return Complex(a.real - b.real, a.vir - b.vir); } Complex operator*(const Complex &a, const Complex &b) { return Complex(a.real * b.real, a.vir * b.vir); } Complex operator/(const Complex &a, const Complex &b) { return Complex(a.real / b.real, a.vir / b.vir); } void output(Complex &a) { cout << a.real << "\t" << a.vir << endl; return ; } ostream &operator<<(ostream &out, const Complex &a) { out << a.real << "\t" << a.vir; return out; } int main() { Complex com(4, 5); output(com); cout << com + 5 << endl; cout << (++com)++ << endl; cout << com << endl; Complex com1(2, 3); cout << com * com1 << endl; return 0; }