面对对象程序设计之运算符重载(1)定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。

简介: 面对对象程序设计之运算符重载(1)定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。

【例】定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编程序,求两个复数之和。

#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   double get_real();
   double get_imag();
   void display();
  private:
   double real;
   double imag;
 };
double Complex::get_real()
{return real;}
double Complex::get_imag()
{return imag;}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
Complex operator + (Complex &c1,Complex &c2)
{
 return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c3=";
 c3.display();
 return 0;
}

回到这题,我们可以仿照上面编写程序。

定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别计算两个复数之和、差、积和商。


#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  &c2);
  Complex  operator-(Complex  &c2);//减
  Complex  operator*(Complex  &c2);//乘
  Complex  operator/(Complex  &c2);//除
  void  display();
private:
  double  real;
  double  imag;
};

加法定义

Complex Complex::operator+(Complex &c2)

{ Complex cn; cn.real = real + c2.real; cn.imag = imag + c2.imag; return cn; }

减法定义

Complex Complex::operator-(Complex &c2)

{ Complex cn; cn.real = real - c2.real; cn.imag = imag - c2.imag; return cn; }


乘法定义

Complex Complex::operator*(Complex &c2)
{
    Complex cn;
    cn.real = real * c2.real-imag*c2.imag;
    cn.imag = imag *c2.real+real* c2.imag;
    return cn;
}

除法定义

 Complex Complex::operator/(Complex &c2)
{
    Complex cn;
    cn.real = (real * c2.real + imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
    cn.imag = (imag *c2.real - real* c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);
    return cn;
}

display定义

void Complex::display()

{ cout << "(" << real << "," << imag << "i)"<<endl; }


主函数

int  main()
{
    double  real, imag;
    cin >> real >> imag;
    Complex  c1(real, imag);
    cin >> real >> imag;
    Complex  c2(real, imag);
    cout << setiosflags(ios::fixed);
    cout << setprecision(2);
    Complex  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;
}

其实,运算符重载很简单,搞懂加法,其他就套就可以了。

代码如下

#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 &c2);
Complex operator -(Complex &c2);
Complex operator *(Complex &c2);
Complex operator /(Complex &c2);
void display();
void set();
private:
double real;
double imag;
};
Complex Complex::operator +(Complex &c2)
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
} 
Complex Complex::operator -(Complex &c2)
{
Complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return c ;
} 
Complex Complex::operator *(Complex &c2)
{
Complex c;
c.real=real*c2.real-imag*c2.imag;
c.imag=real*c2.imag+imag*c2.real;
return c;
}      
Complex Complex::operator /(Complex &c2)
{
Complex c;
c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
return c;
} 
void Complex::set()
{
cout<<"input real=";cin>>real;
cout<<"  imag=";cin>>imag;
}
void Complex::display()
{
    cout<<"("<<real<<","<<imag<<"i)"<<endl;
}  
int main()
{
Complex c1,c2,c3,c4,c5,c6;
c1.set();
c2.set();
c3=c1+c2;
c4=c1-c2;
c5=c1*c2;
c6=c1/c2;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c1+c2=";c3.display();
cout<<"c1-c2=";c4.display();
cout<<"c1*c2=";c5.display();
cout<<"c1/c2=";c6.display();
return 0;
} 


相关文章
|
2月前
|
Go
Golang语言基础数据类型之复数complex
这篇文章介绍了Go语言中复数(complex)数据类型的概念、表示方法和使用示例,包括complex64和complex128两种类型的复数及其在不同领域的应用场景。
43 5
【C++之运算符重载1】复数类 Complex 重载运算符 “+”
【C++之运算符重载1】复数类 Complex 重载运算符 “+”
|
Java
Java实现复数Complex的加减乘除运算、取模、求幅角角度
Java实现复数Complex的加减乘除运算、取模、求幅角角度
257 0
Java实现复数Complex的加减乘除运算、取模、求幅角角度
艾伟_转载:.NET 4.0 Beta2中的BigInteger和Complex类
.NET4.0 Beta2中提供了新的System.Numerics命名空间,对应于System.Numerics.dll。该命名空间下就两个类BigInteger和Complex,我们来简单了解下这两个类的用法。
1023 0
第九周-任务1-Complex类中运算符的重载
【题目】接第8周任务1,定义Complex类中的&lt;&lt;和&gt;&gt;运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。 【参考解答】 #include &lt;iostream&gt; using namespace std; class Complex { public: Complex(){real=0;imag=0;} Co
1436 0
|
3月前
|
机器学习/深度学习 数据挖掘
【博士每天一篇文献-综述】Communication dynamics in complex brain networks
本文综述了复杂脑网络中的通信动态,提出了一个将通信动态视为结构连接和功能连接之间必要联系的概念框架,探讨了结构网络的局部和全局拓扑属性如何支持网络通信模式,以及网络拓扑与动态模型之间的相互作用如何提供对大脑信息转换和处理机制的额外洞察。
43 2
【博士每天一篇文献-综述】Communication dynamics in complex brain networks
|
3月前
|
机器学习/深度学习
【文献学习】Exploring Deep Complex Networks for Complex Spectrogram Enhancement
介绍了一种用于语音增强的复数深度神经网络(CDNN),它通过复数值的短时傅立叶变换(STFT)映射到干净的STFT,并提出了参数整流线性单位(PReLU)的复数扩展,实验结果表明CDNN在语音增强方面相对于实值深层神经网络(DNN)具有更好的性能。
46 2
【文献学习】Exploring Deep Complex Networks for Complex Spectrogram Enhancement
|
3月前
|
数据可视化 算法 Go
【博士每天一篇文献-实验】Exploring the Morphospace of Communication Efficiency in Complex Networks
这篇论文探讨了复杂网络中不同拓扑结构下的通信效率,并使用"效率形态空间"来分析网络拓扑与效率度量之间的关系,得出结论表明通信效率与网络结构紧密相关。
39 3
|
3月前
|
机器学习/深度学习 网络协议 PyTorch
【文献学习】DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement
本文介绍了一种新的深度复数卷积递归网络(DCCRN),用于处理语音增强问题,特别是针对低模型复杂度的实时处理。
96 5