符号重载函数 友元函数


  1. /* 
  2. *Copyright(c) 2016.烟台大学计算机与控制工程学院 
  3. *ALL rights  reserved. 
  4. *文件名称:test.cpp 
  5. *作者:隋宗涛
  6. *完成日期:2016年5月14日 
  7. *问题描述:请用类的友元函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘 
  8. */  
  9. #include<iostream>  
  10. using namespace std;  
  11. class Complex  
  12. {  
  13. public:  
  14.     Complex(){real=0;imag=0;}  
  15.     Complex(double r,double i){real=r; imag=i;}  
  16.     friend Complex operator+(Complex &c1,Complex &c2);  
  17.     friend Complex operator-(Complex &c1,Complex &c2);  
  18.     friend Complex operator*(Complex &c1,Complex &c2);  
  19.     friend Complex operator/(Complex &c1,Complex &c2);  
  20.     void display();  
  21. private:  
  22.     double real;  
  23.     double imag;  
  24. };  
  25. //下面定义成员函数  
  26. //复数相加: (a+bi)+(c+di)=(a+c)+(b+d)i  
  27. Complex operator+(Complex &c1,Complex &c2)  
  28. {  
  29.     Complex c;  
  30.     c.real=c1.real+c2.real;  
  31.     c.imag=c1.imag+c2.imag;  
  32.     return c;  
  33. }  
  34. //复数相减: (a+bi)-(c+di)=(a-c)+(b-d)i  
  35. Complex operator-(Complex &c1,Complex &c2)  
  36. {  
  37.     Complex c;  
  38.     c.real=c1.real-c2.real;  
  39.     c.imag=c1.imag-c2.imag;  
  40.     return c;  
  41. }  
  42. //复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i  
  43. Complex operator*(Complex &c1,Complex &c2)  
  44. {  
  45.     Complex c;  
  46.     c.real=c1.real*c2.real-c1.imag*c2.imag;  
  47.     c.imag=c1.imag*c2.real+c1.real*c2.imag;  
  48.     return c;  
  49. }  
  50.   
  51. //复数相除:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d) +(bc-ad)/(c*c+d*d)i  
  52. Complex operator/(Complex &c1,Complex &c2)  
  53. {  
  54.     Complex c;  
  55.     c.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);  
  56.     c.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);  
  57.     return c;  
  58. }  
  59.  void Complex::display()  
  60. {  
  61.     cout<<"("<<real<<","<<imag<<"i)"<<endl;  
  62. }  
  63. //下面定义用于测试的main()函数  
  64. int main()  
  65. {  
  66.     Complex c1(3,4),c2(5,-10),c3;  
  67.     cout<<"c1=";  
  68.     c1.display();  
  69.     cout<<"c2=";  
  70.     c2.display();  
  71.     c3=c1+c2;  
  72.     cout<<"c1+c2=";  
  73.     c3.display();  
  74.     c3=c1-c2;  
  75.     cout<<"c1-c2=";  
  76.     c3.display();  
  77.     c3=c1*c2;  
  78.     cout<<"c1*c2=";  
  79.     c3.display();  
  80.     c3=c1/c2;  
  81.     cout<<"c1/c2=";  
  82.     c3.display();  
  83.     return 0;  
  84. }  
  85. /*
    *Copyright(c) 2016.烟台大学计算机与控制工程学院
    *ALL rights  reserved.
    *文件名称:test.cpp
    *作者:杨驰
    *完成日期:2016年5月14日
    *问题描述:请用类的友元函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘
    */
    #include<iostream>
    using namespace std;
    class Complex
    {
    public:
        Complex(){real=0;imag=0;}
        Complex(double r,double i){real=r; imag=i;}
        friend Complex operator+(Complex &c1,Complex &c2);
        friend Complex operator-(Complex &c1,Complex &c2);
        friend Complex operator*(Complex &c1,Complex &c2);
        friend Complex operator/(Complex &c1,Complex &c2);
        void display();
    private:
        double real;
        double imag;
    };
    //下面定义成员函数
    //复数相加: (a+bi)+(c+di)=(a+c)+(b+d)i
    Complex operator+(Complex &c1,Complex &c2)
    {
        Complex c;
        c.real=c1.real+c2.real;
        c.imag=c1.imag+c2.imag;
        return c;
    }
    //复数相减: (a+bi)-(c+di)=(a-c)+(b-d)i
    Complex operator-(Complex &c1,Complex &c2)
    {
        Complex c;
        c.real=c1.real-c2.real;
        c.imag=c1.imag-c2.imag;
        return c;
    }
    //复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i
    Complex operator*(Complex &c1,Complex &c2)
    {
        Complex c;
        c.real=c1.real*c2.real-c1.imag*c2.imag;
        c.imag=c1.imag*c2.real+c1.real*c2.imag;
        return c;
    }
    
    //复数相除:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d) +(bc-ad)/(c*c+d*d)i
    Complex operator/(Complex &c1,Complex &c2)
    {
        Complex c;
        c.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
        c.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
        return c;
    }
     void Complex::display()
    {
        cout<<"("<<real<<","<<imag<<"i)"<<endl;
    }
    //下面定义用于测试的main()函数
    int main()
    {
        Complex c1(3,4),c2(5,-10),c3;
        cout<<"c1=";
        c1.display();
        cout<<"c2=";
        c2.display();
        c3=c1+c2;
        cout<<"c1+c2=";
        c3.display();
        c3=c1-c2;
        cout<<"c1-c2=";
        c3.display();
        c3=c1*c2;
        cout<<"c1*c2=";
        c3.display();
        c3=c1/c2;
        cout<<"c1/c2=";
        c3.display();
        return 0;
    }
    

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值