C++程序设计 (第三版) 谭浩强 习题10.2
习题 10.2 定义一个复数类Complex,重载运算符+,-,*,/,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积和商。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
#include <iostream>
using namespace std;
class Complex{
public:
Complex() {real = 0; imag = 0;}
Complex(double r, double i): real(r), imag(i){}
Complex operator + (Complex &);
Complex operator - (Complex &);
Complex operator * (Complex &);
Complex operator / (Complex &);
friend istream& operator >> (istream &, Complex &);
friend ostream& operator << (ostream &, Complex &);
private:
double real;
double imag;
};
istream& operator >> (istream &input, Complex &c){
return input>>c.real>>c.imag;
}
ostream& operator << (ostream &output, Complex &c){
return output<<"("<<c.real<<", "<<c.imag<<"i)";
}
Complex Complex::operator + (Complex &c){
return Complex(real + c.real, imag + c.imag);
}
Complex Complex::operator - (Complex &c){
return Complex(real - c.real, imag - c.imag);
}
Complex Complex::operator * (Complex &c){
return Complex(real * c.real - imag * c.imag, real * c.imag + imag * c.real);
}
Complex Complex::operator / (Complex &c){
return Complex((real * c.real + imag * c.imag) / (c.real * c.real + c.imag * c.imag), \
(imag * c.real - real * c.imag) / (c.real * c.real + c.imag * c.imag));
}
void inputComplex(Complex &c, char *str){
cout<<"Enter Complex "<<str<<": ";
cin>>c;
}
void outputComplex(Complex &c, char *str){
cout<<str<<" = "<<c<<endl;
}
int main(){
Complex c1, c2, c3;
inputComplex(c1, "c1");
inputComplex(c2, "c2");
c3 = c1 + c2;
outputComplex(c3, "c1 + c2");
c3 = c1 - c2;
outputComplex(c3, "c1 - c2");
c3 = c1 * c2;
outputComplex(c3, "c1 * c2");
c3 = c1 / c2;
outputComplex(c3, "c1 / c2");
system("pause");
return 0;
}