在学习了运算符重载后,知道了运算符重载的本质是一个特殊的成员或友元函数,重载后原意义没有失去,而是定义了相对类的一个新运算符。下面来做个运算符重载的练习:
先在复数类中声明好函数原型与复数私有变量
class Complex {
public:
Complex(int a=0, int b=0) { n = a, d = b; }
Complex operator =(Complex &);
Complex operator ++();
Complex operator ++(int);
Complex operator --();
Complex operator --(int);
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 ostream & operator<<(ostream &, Complex &);
friend istream & operator>>(istream & , Complex &);
int getN() {
return n;
}
int getD() {
return d;
}
private:
int n;
int d;
};
再在对应cpp写好函数定义:
Complex Complex::operator =(Complex & a) {
n = a.n; d = a.d;
return *this;
}
Complex operator +(const Complex & a, const Complex & b) {
int n, d;
n = a.n + b.n;
d = a.d + b.d;
return Complex(n, d);
}
Complex operator -(const Complex & a, const Complex & b) {
return Complex(a.n - b.n, a.d - b.d);
}
Complex operator *(const Complex & a, const Complex & b) {
return Complex((a.n * b.n) - (a. d * b.d), (a.n * b.d) + (a. d * b.n));
}
Complex operator /(const Complex & a, const Complex & b) {
return Complex(((a.n * b.n) + (a.d * b.d)) / (b.n*b.n + b.d*b.d), (a.d * b.n - a.n*b.d) / (b.n*b.n + b.d*b.d));
}
ostream & operator<<(ostream & output, Complex & a) {
output << a.getN() << "+" << a.getD() << "i" << endl;
return output;
}
istream & operator>>(istream & input, Complex & a) {
int n, d;
input >> n; input >> d;
a = Complex(n, d);
return input;
}
Complex Complex::operator ++() {
n++; d++;
return *this;
}
Complex Complex::operator ++(int) {
Complex temp;
temp.n = n++;
temp.d = d++;
return temp;
}
Complex Complex::operator --() {
n--; d--;
return *this;
}
Complex Complex::operator --(int) {
Complex temp;
temp.n = n--;
temp.d = d--;
return temp;
}
写段测试代码:
void main(){
Complex a(1, 2);
cin >> a;
a++;
cout << a;
++a;
cout << a;
a = Complex(1);
cout << a;
}
达成了练习的目的,目标达成!