Ex4_8_1.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例4.8_1】 用友元函数重载运算符,实现复数的运算。
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5. class Complex{
  6. double Real,Image ;
  7. public :
  8.     Complex(double r=0.0, double i=0.0){Real=r;Image=i;}//定义构造函数
  9.     Complex(Complex &com){
  10. Real=com.Real ; Image=com.Image ;
  11. }     //定义拷贝构造函数
  12. void  Print(){
  13. cout<<"Real="<<Real<<'t'<<"Image="<<Image<<'n';
  14. }
  15. friend Complex operator+(const Complex &,const Complex &);
  16. friend Complex &operator +=(Complex &,const Complex &);     //重载复数"+="
  17. friend double abs(Complex &);
  18. friend Complex operator*(const Complex &,const Complex &);
  19. friend Complex operator/(const Complex &,const Complex &);
  20. };
  21. Complex operator+(const Complex & c1,const Complex & c2){
  22. return Complex(c1.Real+c2.Real,c1.Image+c2.Image);
  23. }    //隐式说明局部对象
  24. Complex &operator +=(Complex &c1,const Complex &c2){     //重载复数"+="
  25. c1.Real=c1.Real+c2.Real;
  26. c1.Image=c1.Image+c2.Image;
  27. return c1;   //返回由引用参数传递过来的变量,函数返回值可为引用
  28. }
  29. double abs(Complex &c){
  30. return sqrt(c.Real*c.Real+c.Image*c.Image);
  31. }
  32. Complex operator*(const Complex & c1,const Complex & c2){
  33. return Complex(c1.Real*c2.Real-c1.Image*c2.Image ,c1.Real*c2.Image+c2.Real*c1.Image);
  34. }
  35. Complex operator/(const Complex & c1,const Complex & c2){
  36. double d=c2.Real*c2.Real+c2.Image*c2.Image ;
  37. return Complex((c1.Real*c2.Real+c1.Image*c2.Image)/d , (c1.Image*c2.Real-c1.Real*c2.Image)/d) ;
  38. }
  39. int main(void){
  40. Complex c1(1.0,1.0) , c2(2.0,2.0) , c3(4.0,4.0) , c;
  41. double d=0.5 ;
  42. c1.Print();
  43. c=c2+c3 ;
  44. c.Print() ;
  45. c+=c2+=c1 ;
  46. c.Print() ;
  47. c=c+d ;
  48. c.Print() ;
  49. c=d+c ;
  50. c.Print() ;
  51. c=c3*c2 ;
  52. c.Print() ;
  53. c=c3/c1 ;
  54. c.Print() ;
  55. c=c3*d;
  56. c.Print() ;
  57. c=c3/d;
  58. c.Print() ;
  59. cout<<"c3的模为:"<<abs(c3)<<endl ;
  60. return 0;
  61. }